简短结论:readdir 本身不能递归子目录,它只能读取单个目录下的条目(文件和子目录名),是否递归需要你自己写代码实现。
readdir 是什么在 CentOS / Linux 中,readdir 是 POSIX 标准 C 库函数:
#include <dirent.h>
struct dirent *readdir(DIR *dirp);
作用:
opendir)readdir 返回一个目录项readdir 返回的结构体中:
d_name:文件名d_type:文件类型(普通文件 / 目录等)它不会自动遍历子目录。
如果你要递归,需要:
readdir 读取当前目录d_type == DT_DIRopendir + readdir#include <stdio.h>
#include <dirent.h>
#include <string.h>
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;
printf("%s/%s\n", path, entry->d_name);
if (entry->d_type == DT_DIR) {
char sub[1024];
snprintf(sub, sizeof(sub), "%s/%s", path, entry->d_name);
list_dir(sub); // 递归
}
}
closedir(dir);
}
int main() {
list_dir(".");
return 0;
}
如果你只是使用命令,而不是写 C 程序:
find /path -type f
或
ls -R /path
| 方式 | 是否递归 |
|---|---|
readdir |
❌ 不递归(需手动实现) |
find |
✅ 递归 |
ls -R |
✅ 递归 |
如果你是 写程序 / shell / Python / 内核模块,可以告诉我具体场景,我可以给你更合适的方案。