c - inotify 是否同步排队事件?

标签 c linux inotify

我正在尝试使用 inotify 来监控文件系统修改。特别是我正在 try catch 某个预配置目录中文件的所有更新。

当我尝试使用 SIGTERM 关闭应用程序时出现了问题。我希望在此之前处理所有修改。

问题:如果唯一一个进行文件修改(writeing/mving)的进程终止了可靠地说,如果 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/

相关文章:

计算 C 中连续的 1

c++ - 在 Linux 上快速高效地绘制像素阵列

linux - Linux 文件系统上有类似 USN Journal 的东西吗?

linux - Linux中如何获得程序执行的通知

c - 链接到静态库的多个版本

c++ - Qt4 Wrapper 导致段错误

c - 解释C代码指令

database - DB2 Instance User 和 DAS User 的区别

linux - 重命名子文件夹中存在的同名文件以包含子文件夹名称