inotify 停止报告事件

inotify 停止报告事件

我正在用;inotify编写的程序中使用C它与 中的示例非常相似man 7 inotify。步骤基本上是:

/* setup */
int fd = inotify_init1(IN_NONBLOCK);
int wd = inotify_add_watch(fd, path, IN_CLOSE_WRITE);
struct pollfd fds[1];
fds[0].fd = fd;
fds[0].events = POLLIN;

/* within main loop */
int poll_num = poll(fds, 1, 0);
if (poll_num == -1) { /* error handling */ }
else if (poll_num>0) {
    if (fds[0].revents & POLLERR ||
        fds[0].revents & POLLHUP ||
        fds[0].revents & POLLNVAL) { /* error handling */ }
    if (fds[0].revents & POLLIN) { /* read events */ }
}

读取事件时,会检查事件掩码是否存在队列溢出 ( IN_Q_OVERFLOW)、文件系统卸载 ( IN_UNMOUNT) 和其他问题 ( IN_IGNORED)。这些情况(以及POLLERRPOLLHUP等)都不会发生。

这在一段时间内效果很好(通常运行一两天)。然后,无缘无故地inotify停止报告事件。我的程序的其余部分继续运行,没有任何问题,但它不再收到任何事件,inotify. 我不确定如何调试它,因为我相信我正在检查所有相关的错误条件。被监视的文件仍然存在,并且具有与inotify设置监视它时相同的 inode。

什么会导致inotify停止报告事件而不在程序中产生任何错误?

相关内容