对inotify描述符的读取被永久阻塞



我的程序使用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_OPEN, IN_MODIFY, IN_ACESS等)之后,被监视的文件中的后续更改确实产生了任何其他事件==>我的程序在读取函数中挂起(读取被阻止)

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

请显示实际发生的操作"./test.txt"和更多关于你的代码(buff, BUFF_SIZE)。这里有一些需要检查的地方:

  • 有一些特殊的事件,如IN_IGNORED,可能会从文件中删除手表
  • 我建议使用select/poll/epoll来监控fd,而不是阻塞读取。

使用fcntl使文件描述符非阻塞

最新更新