在 Debian(以及一般的 Linux 系统)上,readdir 是支持“大目录”的,但有一些前提和注意点。
readdir 本身没有“目录大小”限制readdir(3)(以及 readdir_r)只是从 *已打开的目录流(DIR ) 中逐个读取目录项:
#include <dirent.h>
DIR *dir = opendir("/path");
struct dirent *ent;
while ((ent = readdir(dir)) != NULL) {
// 处理 ent->d_name
}
closedir(dir);
readdir 都可以正常工作大目录的主要问题通常是:
opendir + 顺序遍历慢
ls(未排序时还好,排序会很慢)rm -rf * 可能触发参数过长或极慢getdents 的关系(底层实现)readdir 在 Debian 上底层调用的是:
getdents64(2)✅ 所以:
“大目录”对
readdir来说不是问题,对“你怎么用”才是问题
如果目录可能很大:
readdir 流式处理ls | wc -l 这类组合DIR *d = opendir(path);
if (!d) { perror("opendir"); return; }
struct dirent *e;
while ((e = readdir(d))) {
if (e->d_name[0] == '.') continue;
// 处理文件
}
closedir(d);
✅ Debian 的 readdir 支持大目录
⚠️ 不是“能不能”,而是“快不快、合不合理”
如果你有具体场景(比如:几百万小文件?要频繁遍历?要删除?),我可以给你更针对性的建议。