是否有一种程序化的方式来判断符号链接是否指向C中的文件或目录?



我正在用readdir递归地迭代目录。

这里记录了struct dirent,并注意到d_type可以有不同的值,包括DT_LNKDT_DIRDT_REG。但是,当d_typeDT_LNK时,没有提示链接是指向文件还是目录。

是否有一种方法来检查一个符号链接的目标是一个文件或目录?

dirent结构可能会告诉你如果条目是一个目录或一个符号链接,但是一些文件系统不提供这些信息d_typeDT_UNKNOWN

在任何情况下,判断符号链接是否指向目录的最简单方法是通过stat系统调用来解析符号链接,如果成功,将填充stat结构,允许S_ISDIR向您提供信息:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int is_directory(const char *path) {
struct stat st;
return !stat(path, &st) && S_ISDIR(st.st_mode);
}

注意这些注意事项:

  • 您必须从目录名和条目名中构造路径以传递给is_directory()
  • 递归目录相关的符号链接可能会导致无限递归的符号链接指向一个父目录或目录本身它所在。

最新更新