温馨提示×

debian readdir能读符号链接吗

小樊
35
2026-09-28 12:38:59
栏目: 智能运维

在 Debian(以及一般 Linux 系统)里,readdir() 本身能不能“读符号链接”要看你指的是哪一种情况:

1. 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,说明是符号链接
}

✅ 结论:能读到符号链接这个“目录项”。


2. readdir() 遇到“符号链接指向的目录”时

如果你 opendir() 打开的是一个符号链接指向的目录(例如 opendir("/link/to/dir")),那么:

  • opendir() 会自动跟随符号链接(follow symlink)
  • readdir() 读取的是目标目录的内容
  • 它不会把符号链接本身当作目录来读

✅ 结论:会读目标目录,不会特别处理符号链接本身。


3. 若不想跟随符号链接

如果你用 opendir() 打开一个符号链接本身(而不是它指向的目录),或者希望区分符号链接:

  • 用 lstat() 判断是否为符号链接
  • 或者用 d_type == DT_LNK

总结

场景 readdir 是否能“读”
目录中包含符号链接 ✅ 能读到符号链接项
打开符号链接指向的目录 ✅ 读目标目录内容
读符号链接“指向的内容” ❌ readdir 不负责,需要自己处理

如果你是在写 C 程序、shell 脚本,或者是用 Python / Go 等语言,也可以告诉我具体场景,我可以给更针对性的说明。

0 踩