在 Debian(以及其它 Linux 系统)上,readdir() 本身并不能监听目录变更,readdir 只是“读取目录内容”,是一次性或遍历式的,没有通知机制。
如果你想要“监听目录变更”,常见做法有以下几种(按推荐程度):
Linux 内核提供的文件系统事件通知机制。
inotify 内核支持)#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
如果你只能用 readdir:
循环:
readdir()
比较上次结果
sleep(1)
缺点:
如果只是“文件出现就执行命令”:
[Path]
PathExists=/path/to/file
[Install]
WantedBy=multi-user.target
| 方法 | 实时 | 推荐 |
|---|---|---|
| inotify | ✅ | ⭐⭐⭐⭐⭐ |
| fanotify | ✅ | ⭐⭐⭐ |
| readdir 轮询 | ❌ | ⭐ |
结论:
不要用
readdir监听变更,用inotify
如果你能说明:
我可以给你更具体的示例。