在 Debian(以及一般 Linux 系统)里,readdir() 本身能不能“读符号链接”要看你指的是哪一种情况:
readdir() 读取目录内容时readdir() 用于遍历目录中的条目(dirent)。
如果一个目录里包含符号链接文件,readdir() 是可以读到的,它会把符号链接当作一个普通的目录项返回(d_type 通常为 DT_LNK)。
示例:
DIR *dir = opendir("/some/dir");
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
// 如果 entry->d_type == DT_LNK,说明是符号链接
}
✅ 结论:能读到符号链接这个“目录项”。
readdir() 遇到“符号链接指向的目录”时如果你 opendir() 打开的是一个符号链接指向的目录(例如 opendir("/link/to/dir")),那么:
opendir() 会自动跟随符号链接(follow symlink)readdir() 读取的是目标目录的内容✅ 结论:会读目标目录,不会特别处理符号链接本身。
如果你用 opendir() 打开一个符号链接本身(而不是它指向的目录),或者希望区分符号链接:
lstat() 判断是否为符号链接d_type == DT_LNK| 场景 | readdir 是否能“读” |
|---|---|
| 目录中包含符号链接 | ✅ 能读到符号链接项 |
| 打开符号链接指向的目录 | ✅ 读目标目录内容 |
| 读符号链接“指向的内容” | ❌ readdir 不负责,需要自己处理 |
如果你是在写 C 程序、shell 脚本,或者是用 Python / Go 等语言,也可以告诉我具体场景,我可以给更针对性的说明。