如何区分常规文件和符号文件link?

How to differentiate between a regular file and a symbolic link?

我正在使用 linux 中的 C posix 处理符号 links。

我检测到一个文件,我必须区分常规文件和符号文件 link。

现在我做下一个:

if(S_ISREG(direct_info.st_mode)) {
   // deal with regular file
}
else if(S_ISLNK(direct_info.st_mode)) {
   // deal with symbolic link
}

问题是当文件是符号文件时 link 执行流程在第一个 if 处输入。也就是说,当是符号 link 时,也会进入 S_ISREG 条件。那么,我能做些什么来区分两者呢?

您可能正在使用 stat() 获取文件模式。 stat() 实际上 returns 有关目标的信息,而不是 link 本身。 因此,为了获取有关 link 本身的信息,您需要使用 lstat().