简短结论:readdir 本身不能递归搜索,它只负责“读一个目录里的条目”。
readdir 是什么在 Debian / Linux 下,readdir(以及 readdir_r)是 POSIX / glibc 提供的 目录读取函数:
struct dirent *readdir(DIR *dirp);
作用:
opendir)readdir 只做到这一层:
目录 A
├─ file1
├─ dirB
readdir 会返回:
file1dirB但 它不会去 dirB 里读内容。
需要你自己写递归逻辑:
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 child[PATH_MAX];
snprintf(child, sizeof(child), "%s/%s", path, entry->d_name);
list_dir(child); // 递归
} else {
printf("%s/%s\n", path, entry->d_name);
}
}
closedir(dir);
}
如果你不是写 C 程序,而是“在 Debian 上搜索文件”:
find /path -type f
readdir:只读单层目录readdir + 递归调用 实现如果你是想 用 C / C++ / Python / shell 实现递归搜索,可以告诉我语言,我可以直接给你完整示例。