温馨提示×

linux fsnotify支持文件创建事件吗

小樊
82
2025-01-01 22:11:05
栏目: 智能运维

是的,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实例。

0