c - 如何区分普通文件和符号链接(symbolic link)?

标签 c linux posix symlink

<分区>

我在 Linux 中使用 C posix 处理符号链接(symbolic link)。

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

现在我做下一个:

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

问题是当文件是符号链接(symbolic link)时,执行流程在第一个 if 处输入。也就是说,当是一个符号链接(symbolic link)时,也进入了S_ISREG条件。那么,我该怎么做才能区分两者呢?

最佳答案

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

关于c - 如何区分普通文件和符号链接(symbolic link)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40577699/

相关文章:

c - 访问另一个进程中的共享内存缓冲区

c - 整数和数组之间的奇怪转换

c# - 将 byte[] 从 c# 传递到纯 c dll 时发生访问冲突

java - Java代码转换为C -> 通过JNI调用 -> 程序停止运行

c - sigaction 和信号有什么区别?

c - 如何在运行时使用 POSIX clock() 函数监视 CPU 利用率?

c - 将文本文件读入c中的数组

linux - 深渊-pe : variables to assemble multiple genomes with one command

linux - apache 服务器 web 文件上的 chmod 600 仍然允许从世界访问

linux - 需要替代参数才能使用 bash 执行 Pearl 脚本