inotify file in C

前端 未结 4 1425
悲哀的现实
悲哀的现实 2020-12-20 15:38

I am trying to run an example of inotify in C..but it\'s not working. I want to monitor modifications to a file (the file is tmp.cfg), but it doesn\'t work..I don\'t know if

4条回答
  •  别那么骄傲
    2020-12-20 16:21

    You have 2 issues. First, as far as I can tell, inotify does not really work on files - it needs directory name to watch.

    Second, you missed if (event->len) { inside while loop.

    This code works for me for creating, deleting and modifying files in current directory:

    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    
    #define EVENT_SIZE  (sizeof(struct inotify_event))
    #define BUF_LEN     (1024 * (EVENT_SIZE + 16))
    
    int main(int argc, char **argv) {
        int length, i = 0;
        int fd;
        int wd;
        char buffer[BUF_LEN];
    
        fd = inotify_init();
    
        if (fd < 0) {
            perror("inotify_init");
        }
    
        wd = inotify_add_watch(fd, ".",
            IN_MODIFY | IN_CREATE | IN_DELETE);
        length = read(fd, buffer, BUF_LEN);
    
        if (length < 0) {
            perror("read");
        }
    
        while (i < length) {
            struct inotify_event *event =
                (struct inotify_event *) &buffer[i];
            if (event->len) {
                if (event->mask & IN_CREATE) {
                    printf("The file %s was created.\n", event->name);
                } else if (event->mask & IN_DELETE) {
                    printf("The file %s was deleted.\n", event->name);
                } else if (event->mask & IN_MODIFY) {
                    printf("The file %s was modified.\n", event->name);
                }
            }
            i += EVENT_SIZE + event->len;
        }
    
        (void) inotify_rm_watch(fd, wd);
        (void) close(fd);
    
        return 0;
    }
    

提交回复
热议问题