温馨提示×

centos readdir能递归子目录吗

小樊
47
2026-10-23 17:24:24
栏目: 智能运维

在 CentOS(以及其他 Linux 系统) 上,readdir 本身不能递归子目录。

1. readdir 是什么

readdir 是 POSIX / glibc 提供的函数(在 <dirent.h> 中),用于:

  • 打开目录(opendir)
  • 读取 当前目录下的条目
  • 每次调用返回一个 struct dirent
DIR *dir = opendir(path);
struct dirent *entry;

while ((entry = readdir(dir)) != NULL) {
    // 只能看到当前目录下的文件/子目录
}

它 只遍历一层目录,不会自动进入子目录。


2. 如何实现“递归”

需要 自己写递归逻辑:

void list_dir(const char *path) {
    DIR *dir = opendir(path);
    if (!dir) return;

    struct dirent *entry;
    while ((entry = readdir(dir)) != NULL) {
        if (strcmp(entry->d_name, ".") == 0 ||
            strcmp(entry->d_name, "..") == 0)
            continue;

        char full[1024];
        snprintf(full, sizeof(full), "%s/%s", path, entry->d_name);
        printf("%s\n", full);

        if (entry->d_type == DT_DIR) {
            list_dir(full);  // 递归
        }
    }
    closedir(dir);
}

3. CentOS 上的 alternatives

如果你只是 命令行使用,而不是写 C 程序:

  • find /path -type f
  • ls -R
  • tree

如果是 C/C++ 程序,还可以用:

  • nftw()(推荐,标准且安全)
  • fts_open()(更现代)

总结

✅ readdir 不能递归
✅ 必须通过 代码递归调用 或 系统提供的高级接口 实现
✅ CentOS 与内核、glibc 版本无关,行为一致

如果你是在 写 C / C++ 程序、shell 脚本、或者 Python,可以告诉我具体场景,我可以给更合适的方案。

0 踩