我正在用readdir
递归地迭代目录。
这里记录了struct dirent
,并注意到d_type
可以有不同的值,包括DT_LNK
、DT_DIR
和DT_REG
。但是,当d_type
为DT_LNK
时,没有提示链接是指向文件还是目录。
是否有一种方法来检查一个符号链接的目标是一个文件或目录?
dirent
结构可能会告诉你如果条目是一个目录或一个符号链接,但是一些文件系统不提供这些信息d_type
和DT_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()
。 - 递归目录相关的符号链接可能会导致无限递归的符号链接指向一个父目录或目录本身它所在。