在 CentOS(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));
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
适合:
如果你只能用 readdir:
while (1) {
DIR *dir = opendir("/path");
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
// 比较上一次结果
}
closedir(dir);
sleep(1);
}
❌ 缺点:
readdir 能监听 → 错stat 能监听 → 错| 方法 | 是否推荐 | 说明 |
|---|---|---|
| inotify | ✅✅✅ | 最佳方案 |
| fanotify | ✅✅ | 系统级监控 |
| readdir 轮询 | ❌ | 临时方案 |
| readdir 监听 | ❌ | 不支持 |
如果你能说明:
我可以给你更精确的代码或命令。