温馨提示×

debian readdir怎样监听变更

小樊
42
2026-09-16 12:51:03
栏目: 智能运维

在 Debian(以及其它 Linux 系统)上,readdir() 本身并不能监听目录变更readdir 只是“读取目录内容”,是一次性或遍历式的,没有通知机制。

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


1. inotify(最常用、最推荐)

Linux 内核提供的文件系统事件通知机制。

特点

  • 实时监听
  • 可监听:创建、删除、修改、重命名等
  • Debian 默认支持(需 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));
        // 解析 buf 中的 inotify_event
    }
    return 0;
}

命令行工具

inotifywait -m /path/to/dir

安装:

sudo apt install inotify-tools

2. fanotify(更高级)

  • 比 inotify 更底层
  • 可监听整个文件系统
  • 适合安全/审计场景

3. 轮询 readdir(不推荐)

如果你只能用 readdir

循环:
    readdir()
    比较上次结果
    sleep(1)

缺点:

  • 延迟高
  • CPU 浪费
  • 可能漏事件

4. systemd 路径单元(特定场景)

如果只是“文件出现就执行命令”:

[Path]
PathExists=/path/to/file

[Install]
WantedBy=multi-user.target

总结

方法 实时 推荐
inotify ⭐⭐⭐⭐⭐
fanotify ⭐⭐⭐
readdir 轮询

结论

不要用 readdir 监听变更,用 inotify

如果你能说明:

  • 使用语言(C / Python / Shell)
  • 监听粒度(整个目录 / 子目录)
  • 是否需要跨平台

我可以给你更具体的示例。

0