是的,Linux的fsnotify(file system notification)机制支持文件创建事件
以下是一个简单的示例,展示了如何使用fsnotify监控文件创建事件:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/inotify.h>
#include <unistd.h>
#define EVENT_SIZE ( sizeof (struct inotify_event) )
#define BUF_LEN ( 1024 * ( EVENT_SIZE + 16 ) )
int main() {
int length, i = 0;
int fd = inotify_init();
if (fd < 0) {
perror("inotify_init");
exit(EXIT_FAILURE);
}
int wd = inotify_add_watch(fd, ".", IN_MODIFY | IN_CREATE | IN_DELETE);
if (wd < 0) {
perror("inotify_add_watch");
close(fd);
exit(EXIT_FAILURE);
}
char buffer[BUF_LEN];
while (1) {
length = read(fd, buffer, BUF_LEN);
if (length < 0) {
perror("read");
break;
}
while (i < length) {
struct inotify_event *event = (struct inotify_event *)&buffer[i];
if (event->len) {
if (event->mask & IN_CREATE) {
printf("File created: %s\n", event->name);
}
}
i += EVENT_SIZE + event->len;
}
}
inotify_rm_watch(fd, wd);
close(fd);
return 0;
}
这个示例中,我们首先使用inotify_init()
创建一个inotify实例,然后使用inotify_add_watch()
添加对当前目录(.
)的监控,包括文件修改、创建和删除事件。接下来,我们使用一个无限循环来读取inotify实例中的事件。当检测到文件创建事件时,我们打印出创建的文件名。最后,我们使用inotify_rm_watch()
移除监控,并关闭inotify实例。