在 Debian(以及一般 Linux/Unix 系统) 中,readdir 本身不支持递归。
readdir 是什么readdir() 是 POSIX / C 标准库函数struct dirent *readdir(DIR *dirp);
❌ 不支持
readdir 只返回当前目录下的内容opendir + readdirvoid 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);
}
find、ls -Ros.walk()std::filesystem::recursive_directory_iteratorgetdents64,但仍然不递归| 项目 | 是否支持 |
|---|---|
readdir 递归 |
❌ 不支持 |
| 可手动实现递归 | ✅ 可以 |
| Debian 特有影响 | ❌ 无,POSIX 通用 |
如果你是想 提高性能 / 避免递归栈溢出 / 用系统调用做递归扫描,也可以继续问。