温馨提示×

centos readdir如何监听

小樊
39
2026-09-30 07:19:22
栏目: 智能运维

在 CentOS(Linux) 上,readdir 本身不能用来“监听”目录变化,readdir 只是读取目录内容,是一次性扫描,不具备事件通知能力。

如果你想要“监听目录变化”,常见做法如下(按推荐程度):


✅ 推荐方案 1:inotify(最常用)

Linux 内核提供 inotify 机制,专门用来监听文件/目录事件。

监听内容

  • 文件创建 / 删除
  • 文件修改
  • 文件重命名
  • 目录变化

示例(C 语言)

#include <sys/inotify.h>
#include <stdio.h>
#include <unistd.h>

int main() {
    int fd = inotify_init();
    int wd = inotify_add_watch(fd, "/path/to/dir", IN_CREATE | IN_DELETE | IN_MODIFY);

    char buf[4096];
    while (1) {
        int len = read(fd, buf, sizeof(buf));
        struct inotify_event *event = (struct inotify_event *)buf;
        if (event->mask & IN_CREATE)
            printf("file created: %s\n", event->name);
        if (event->mask & IN_DELETE)
            printf("file deleted: %s\n", event->name);
    }
}

编译

gcc inotify_test.c -o inotify_test

✅ 推荐方案 2:fanotify(更底层,适合安全/审计)

  • 比 inotify 更底层
  • 可监听整个文件系统
  • 常用于杀毒软件、审计系统

适合:

  • 文件系统级监控
  • 权限控制

✅ 方案 3:用户态轮询(不推荐)

如果你只能用 readdir:

while (1) {
    DIR *dir = opendir("/path");
    struct dirent *entry;
    while ((entry = readdir(dir)) != NULL) {
        // 比较上一次结果
    }
    closedir(dir);
    sleep(1);
}

❌ 缺点:

  • 性能差
  • 有延迟
  • 无法捕获瞬时变化

❌ 常见误解

  • ❌ readdir 能监听 → 错
  • ❌ stat 能监听 → 错
  • ✅ 只能轮询对比 或 用 inotify/fanotify

✅ 总结

方法 是否推荐 说明
inotify ✅✅✅ 最佳方案
fanotify ✅✅ 系统级监控
readdir 轮询 ❌ 临时方案
readdir 监听 ❌ 不支持

如果你能说明:

  • 用 C / Python / Shell?
  • 监听 文件还是目录?
  • CentOS 版本(7 / 8 / Stream)?

我可以给你更精确的代码或命令。

0 踩