在 CentOS(Linux) 里,readdir 本身是 POSIX 标准函数,并不是“事件驱动/回调式”的 API。它通常是 同步、循环调用 的:
struct dirent *entry;
DIR *dir = opendir("/path");
while ((entry = readdir(dir)) != NULL) {
// 这里就相当于“回调逻辑”
printf("%s\n", entry->d_name);
}
closedir(dir);
你可以手动模拟回调:
#include <dirent.h>
#include <stdio.h>
typedef void (*readdir_cb)(struct dirent *);
void readdir_with_cb(const char *path, readdir_cb cb) {
DIR *dir = opendir(path);
if (!dir) return;
struct dirent *entry;
while ((entry = readdir(dir))) {
cb(entry);
}
closedir(dir);
}
void my_cb(struct dirent *e) {
printf("callback: %s\n", e->d_name);
}
int main() {
readdir_with_cb("/etc", my_cb);
}
✅ 这是 最常见“回调 readdir”的理解
Linux 没有原生异步 readdir,但可以用:
inotify + 手动遍历libuv(Node.js 底层)asyncio / epoll + 线程池例如 libuv:
uv_fs_scandir(loop, &req, path, 0, scandir_cb);
但这是 高级用法,不是标准 readdir
请告诉我:
我可以直接给你对应示例。
CentOS 的
readdir本身没有回调,只能自己包一层函数指针,或用异步库实现回调式目录遍历。
如果你贴一段代码,我可以直接帮你改成“回调版本”。