在 Debian(或者说 Linux 下 C/C++ 编程)里,readdir 本身是不带缓存的,它每次调用都会通过系统调用从内核获取目录项。如果你想“缓存 readdir”,通常有以下几种常见做法和层次:
Linux 本身会对目录和 inode 进行缓存:
只要你:
opendir/closedir那么多次 readdir 其实已经在“用缓存”了。
✅ 一般不需要你做什么
❌ 但这是进程间、内核级的,不可控
#include <dirent.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
struct dir_entry {
char name[256];
};
struct dir_cache {
struct dir_entry *entries;
int count;
};
struct dir_cache *cache_readdir(const char *path) {
DIR *dir = opendir(path);
if (!dir) return NULL;
struct dir_cache *cache = malloc(sizeof(*cache));
cache->count = 0;
cache->entries = NULL;
struct dirent *ent;
int cap = 0;
while ((ent = readdir(dir))) {
if (cache->count >= cap) {
cap = cap ? cap * 2 : 16;
cache->entries = realloc(cache->entries,
cap * sizeof(struct dir_entry));
}
strncpy(cache->entries[cache->count].name, ent->d_name, 255);
cache->count++;
}
closedir(dir);
return cache;
}
之后你就:
cache->entriesreaddir⚠️ 注意:目录变化时要失效缓存
getdents / getdents64(更底层)readdir 是对 getdents64 的封装。你可以:
linux_dirent64适合:
(glibc 没有暴露,需要 syscall)
如果你不想自己写:
✅ 适合缓存:
❌ 不适合:
如果你能说清楚:
我可以给你更具体的缓存方案或代码。