在 Debian(以及其它 Linux 系统)上,readdir 本身并不能监听目录变更,readdir 只是“读取目录内容”,是一次性或轮询式的。
要“监听目录变更”,常见、推荐的做法如下(按使用场景):
inotifywait(最简单)Debian 自带工具:
sudo apt install inotify-tools
监听目录:
inotifywait -m -r -e create,delete,modify,move /path/to/dir
参数说明:
-m:持续监听-r:递归子目录-e:事件类型适合写程序:
#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 | IN_MOVED_TO);
char buf[4096];
while (1) {
int len = read(fd, buf, sizeof(buf));
// 解析 inotify_event
}
}
✅ 优点
❌ 缺点
fcntl如果你不能用了 inotify:
while (1) {
readdir(...)
sleep(1);
}
❌ 延迟高、CPU 浪费
| 需求 | 方案 |
|---|---|
| Shell 脚本监听 | inotifywait |
| C/C++ 程序 | inotify |
| 系统级监控 | fanotify |
| 无法用 inotify | 轮询 readdir |
如果你愿意,可以告诉我:
我可以直接给你一份可运行的示例代码。