如果输出"CONFIG_INOTIFY_USER=y",便可以使用inotify机制。 下面代码展示了利用inotify对/etc/目录下文件读写进行监控:
#include <sys/inotify.h> #include <unistd.h> #include <stdio.h> #define NAME_MAX 100 #define BUF_LEN (10 * sizeof(struct inotify_event) + NAME_MAX +1) int get_inotify() { int fd; fd = inotify_init(); if (fd == -1) { perror("inotify_init"); return -1; // exit (EXIT_FAILURE); } int wd; wd = inotify_add_watch(fd, "/etc/, IN_ACCESS | IN_MODIFY); if (wd == -1) { perror ("inotify_add_watch"); return -1; // exit (EXIT_FAILURE); } char buf[BUF_LEN] __attribute__((aligned(4))); while(1) { ssize_t len, i = 0; /* read BUF_LEN bytes’ worth of events */ len = read (fd, buf, BUF_LEN); /* loop over every read event until none remain */ while (i < len) { struct inotify_event *event = (struct inotify_event *) &buf[i]; printf("wd=%d mask=%d cookie=%d len=%d dir=%s\n", event->wd, event->mask, event->cookie, event->len, (event->mask & IN_ISDIR) ? "yes" : "no"); /* if there is a name, print it */ if (event->len) { printf ("name=%s\n", event->name); } /* update the index to the start of the next event */ i += sizeof(struct inotify_event) + event->len; } } return 0; } int main(int argc, char const *argv[]) { /* code */ get_inotify(); return 0; }