温馨提示×

centos readdir怎么回调

小樊
46
2026-09-24 09:33:16
栏目: 智能运维

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);

如果你说的“回调”是指这几种情况:

1️⃣ 自己封装一个“回调式 readdir”

你可以手动模拟回调:

#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”的理解


2️⃣ 异步目录遍历(真·回调)

Linux 没有原生异步 readdir,但可以用:

  • inotify + 手动遍历
  • libuv(Node.js 底层)
  • asyncio / epoll + 线程池

例如 libuv

uv_fs_scandir(loop, &req, path, 0, scandir_cb);

但这是 高级用法,不是标准 readdir


3️⃣ 你是在用某种框架?

请告诉我:

  • C / C++?
  • glib / Qt / libevent / libuv?
  • 还是在写 Shell / Python

我可以直接给你对应示例。


总结一句话

CentOS 的 readdir 本身没有回调,只能自己包一层函数指针,或用异步库实现回调式目录遍历。

如果你贴一段代码,我可以直接帮你改成“回调版本”。

0