在 CentOS(以及一般的 Linux) 上,readdir() 本身不会做用户态缓存,但是否“有缓存”要看层次:
readdir() 本身readdir() 是 glibc + 内核接口也就是说:
应用层调用
readdir(),不会自动缓存整个目录
Linux 内核 有目录项缓存(dentry cache):
dcache(directory entry cache)readdir() 有加速作用,但:
drop_caches 影响示例:
# 手动清理缓存
echo 2 > /proc/sys/vm/drop_caches
readdir() 第二次通常会更快| 文件系统 | 是否有 readdir 缓存 |
|---|---|
| NFS | ✅ 有(actimeo) |
| CIFS | ✅ 有 |
| FUSE | ❌ 默认无(看实现) |
例如 NFS:
mount -o actimeo=60 ...
如果你希望 readdir 结果缓存,需要自己在应用里做:
// 伪代码
static DirCache cache;
if (!cache.valid) {
while ((entry = readdir(dir))) {
cache.add(entry);
}
cache.valid = true;
}
或更高层:
opendir + readdir → 存入 map✅ 能缓存吗?
readdir() 本身:❌ 不缓存如果你愿意,可以告诉我:
我可以给你更具体的优化方案。