我正在使用 readdir
递归地迭代目录。
struct dirent
已记录 here ,并指出 d_type
可以具有不同的值,包括 DT_LNK
、DT_DIR
和 DT_REG
。
但是,当 d_type
为 DT_LNK
时,不会提示链接是指向文件还是目录。
有没有办法检查符号链接(symbolic link)的目标是文件还是目录?
最佳答案
dirent
结构可能会告诉您该条目是目录还是符号链接(symbolic link),但某些文件系统在 d_type
中不提供此信息,并将其设置为 DT_UNKNOWN
。
无论如何,判断符号链接(symbolic link)是否指向目录的最简单方法是通过 stat
系统调用来解析符号链接(symbolic link),如果成功,将填充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()
。 - 对通过符号链接(symbolic link)链接的目录进行递归可能会导致无限递归,因为符号链接(symbolic link)可能指向父目录或其所在目录本身。
关于c - 有没有一种编程方法可以判断符号链接(symbolic link)是否指向 C 中的文件或目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73000247/