I was looking for inotify related questions, and this is a bit different ...
I use the following code to monitor changes to a single file (not a directory). When testing read () returns when I save the target file, which means that it works. But event-> mask is 32768, which is not IN_MODIFY, and the name is empty. Another problem: he cannot keep track of. When I change the file a second time, it does not respond. Thanks for the help!
#include <sys/inotify.h> #include <unistd.h> #include <stdio.h> #define EVENT_SIZE (sizeof (struct inotify_event)) #define BUF_LEN (16 * (EVENT_SIZE + 16)) int main() { int fd; fd = inotify_init(); if (fd < 0) perror("inotify_init()"); int wd; wd = inotify_add_watch(fd, "target.txt", IN_MODIFY); if (wd < 0) perror("inotify_add_watch"); char buf[BUF_LEN]; int len; start: len = read(fd, buf, BUF_LEN); if (len > 0) { int i = 0; while (i < len) { struct inotify_event *event; event = (struct inotify_event *) &buf[i]; printf("wd=%d mask=%x cookie=%u len=%u\n", event->wd, event->mask, event->cookie, event->len); if (event->mask & IN_MODIFY) printf("file modified %s", event->name); if (event->len) printf("name=%s\n", event->name); i += EVENT_SIZE + event->len; } } goto start; return 0; }
source share