0

我的程序使用inotify来监视文件的更改。我的代码如下:

    fd = inotify_init();
    wd = inotify_add_watch(fd, "./test.txt", IN_ALL_EVENTS);
    len = read(fd, buff, BUFF_SIZE);
    while (i < len) {
        struct inotify_event *pevent = (struct inotify_event *) &buff[i];
                //process events
        i += sizeof(struct inotify_event) + pevent->len;
    }

但是,在我获得了受监控文件中第一次更改的几个事件(事件、、、IN_OPENIN_MODIFYIN_ACESS之后,受监控文件中的后续更改确实会生成任何其他事件 ==> 我的程序在读取函数中挂起(读取是被封锁)

你们能帮我解释一下这个错误吗?

4

1 回答 1

0

请显示“./test.txt”实际发生的操作以及有关您的代码的更多信息(buff,BUFF_SIZE)。您需要检查以下几点:

  • 有一些特殊事件,如 IN_IGNORED,可能会从文件中删除 watch
  • 我建议使用 select/poll/epoll 来监控 fd 而不是 BLOCKING 读取它。
于 2013-05-07T06:57:01.603 回答