温馨提示×

debian readdir是否支持递归

小樊
34
2026-10-10 06:19:58
栏目: 智能运维

在 Debian(以及一般 Linux/Unix 系统) 中,readdir 本身不支持递归。

1. readdir 是什么

  • readdir() 是 POSIX / C 标准库函数
  • 作用:读取一个已打开目录中的下一个条目(文件或子目录)
  • 函数原型(简化):
struct dirent *readdir(DIR *dirp);
  • 它 只处理单层目录,不会自动进入子目录

2. 是否支持递归?

❌ 不支持

  • readdir 只返回当前目录下的内容
  • 如果某项是目录,需要你自己判断并再次调用 opendir + readdir

3. 如何实现递归(示例思路)

void list_dir(const char *path) {
    DIR *dir = opendir(path);
    struct dirent *entry;

    while ((entry = readdir(dir)) != NULL) {
        if (entry->d_type == DT_DIR) {
            // 跳过 . 和 ..
            if (strcmp(entry->d_name, ".") == 0 ||
                strcmp(entry->d_name, "..") == 0)
                continue;

            char newpath[PATH_MAX];
            snprintf(newpath, sizeof(newpath), "%s/%s", path, entry->d_name);
            list_dir(newpath); // 递归
        } else {
            printf("%s\n", entry->d_name);
        }
    }
    closedir(dir);
}

4. 如果你不想自己写递归

  • Shell:find、ls -R
  • 高级语言:
    • Python:os.walk()
    • C++17:std::filesystem::recursive_directory_iterator
  • 系统调用:
    • Linux 有 getdents64,但仍然不递归

总结

项目 是否支持
readdir 递归 ❌ 不支持
可手动实现递归 ✅ 可以
Debian 特有影响 ❌ 无,POSIX 通用

如果你是想 提高性能 / 避免递归栈溢出 / 用系统调用做递归扫描,也可以继续问。

0 踩