简短回答:readdir 本身不支持递归。
详细说明如下:
readdir 是什么在 Ubuntu / Linux 中,readdir(以及 readdir64、readdir_r)是 POSIX / glibc 提供的目录读取函数,用于:
opendir)readdir)closedir)它只读取当前目录下的条目,不会自动进入子目录。
readdir 的设计原则是:
一次只读取一个目录项(dirent)
如果某个目录项是子目录(d_type == DT_DIR),你需要自己:
opendirreaddir也就是说:递归是你自己写的逻辑,不是 readdir 提供的
#include <dirent.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
void list_dir(const char *path) {
DIR *dir = opendir(path);
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);
}
可以选择:
nftw()(标准库,支持递归遍历)fts_open() / fts_read()(更强大)findos.walkreaddir:单层目录读取如果你是在 Shell / Python / C++ 场景下问,也可以告诉我,我可以给对应示例。