在 Linux 中,readdir 本身是否“支持”符号链接,取决于你从哪个角度理解“支持”:
readdir 对符号链接的“读取”行为结论:支持,而且默认就会返回符号链接。
readdir()(以及 readdir64、getdents 等)只是 读取目录项(directory entry)d_type 中,若支持)struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
// 符号链接也会在这里出现
}
如果你用 d_type 判断:
if (entry->d_type == DT_LNK) {
// 这是一个符号链接
}
注意:
d_type在某些文件系统(如某些网络文件系统)上可能是DT_UNKNOWN
readdir 是否“跟随”符号链接?结论:不跟随。
readdir 不会自动解析符号链接指向的目标stat() → 跟随符号链接lstat() → 不跟随,获取符号链接本身信息readlink() → 读取链接指向的路径示例:
lstat(entry->d_name, &sb);
if (S_ISLNK(sb.st_mode)) {
// 是符号链接本身
}
opendir("符号链接目录") 的情况opendir() 一个指向目录的符号链接:
opendir() 一个指向文件的符号链接:
ENOTDIR)| 问题 | 答案 |
|---|---|
readdir 是否能看到符号链接? |
✅ 能 |
readdir 是否区分符号链接? |
✅ 通过 d_type 或 lstat |
readdir 是否解析符号链接? |
❌ 不解析 |
opendir 符号链接目录 |
✅ 会自动跟随 |
如果你愿意,我也可以:
readdir vs scandir你想看哪一块?