简短回答:readdir 本身不会“读取符号链接的内容”,但它能列出目录中的符号链接项**。**
下面分几种情况说清楚:
readdir 能“看到”符号链接吗?能。
readdir() 用来读取一个目录里的条目(dirent),符号链接作为目录中的一个文件项,会被正常返回。
示例:
DIR *dir = opendir("/some/dir");
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
如果 /some/dir 里有:
file.txt
link -> file.txt
那么 readdir 会返回:
file.txt
link
✅ 符号链接本身会被列出
readdir 会跟随符号链接吗?不会。
readdir() 只返回目录项信息,不会:
它返回的 struct dirent 中:
d_name:符号链接名字d_type:可能是 DT_LNK示例:
if (entry->d_type == DT_LNK) {
printf("这是一个符号链接\n");
}
⚠️ 情况不同:
opendir("symlink_dir")readdir() 读的是目标目录的内容如果你不想跟随符号链接,需要用:
open() + fdopendir() + O_NOFOLLOWreaddir 做不到,需要用:
char buf[1024];
readlink("/path/to/link", buf, sizeof(buf));
| 问题 | 答案 |
|---|---|
readdir 能列出符号链接吗 |
✅ 能 |
readdir 会解析符号链接吗 |
❌ 不会 |
readdir 能读链接目标吗 |
❌ 不能 |
| 读链接目标用啥 | readlink() |
如果你是在写 递归遍历目录 / 防符号链接循环 的代码,我也可以给你示例。