我正在尝试使用 inotify
来监控文件系统修改。特别是我正在 try catch 某个预配置目录中文件的所有更新。
当我尝试使用 SIGTERM
关闭应用程序时出现了问题。我希望在此之前处理所有修改。
问题:如果唯一一个进行文件修改(write
ing/mv
ing)的进程终止了可靠地说,如果 FIONREAD
ioctl
返回 0,则所有修改都从 inotify
文件描述符中检索。 The documentation指定:
The
FIONREAD ioctl(2)
returns the number of bytes available to read from an inotify file descriptor.
所以我会假设,如果在执行所有修改的进程关闭后队列中没有留下任何事件,那么所有事件都会从 inotify 描述符中读取,并且以后不会有人到达。
最佳答案
我强烈建议您使用 signalfd
,请参阅 this man page .
有了这个信号,信号就会沿着管道传递,而不是异步运行信号操作。这样你就可以使用像 select()
或 epoll()
这样的 react 器来等待 inotify 管道和 signalfd()
文件描述符,允许您在实际从 fd 读取信号并处理它时进行整洁管理。
而且,因为您是在程序的主循环中同步处理信号,而不是在异步信号操作中,所以在处理信号时可以调用哪些函数没有限制。
以我的拙见,signalfd()
远远优于处理信号的令人讨厌的旧方法。唯一的小缺点是它(据我所知)不能移植到其他 *nixes。
关于c - inotify 是否同步排队事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55197613/