inotify:报告的事件是否与文件系统中发生的事件严格相同?

时间:2014-05-21 09:11:51

标签: linux inotify file-monitoring

我正在使用 inotify 来监控各种分区上的各种目录(可能位于不同的硬盘上)。为了确保收集到某个时间点 T 之前发生的所有事件,我正在触摸我的主目录中的特殊文件并等待 inotify 报告这个修改。收到此通知后,我是否可以确定在 T (所有目录和所有分区)之前我还收到了所有修改的所有事件?

2 个答案:

答案 0 :(得分:2)

我不确定这是否适用于同一个inotify实例中不同文件系统上的监视,但可以肯定地说该技术通常有效:我们在Watchman中使用它(我们在这里描述它:{{3} })

我们假设这不会在文件系统边界之间正确排序,并且每个观察的根创建一个实例;这使我们更容易正确地跟踪和关联事件。我们还必须处理fsevents,kqueue和其他观察实现,因此我们尽量避免与底层实现过于紧密耦合。

根据您的确切用例,您可以在每个文件系统中使用一个实例,并在您的时间T触摸每个文件系统根目录中的特殊文件。前提是您已经观察到了两个特殊文件变化,你知道你已经看到了所有的时间T,也许还有一点点。如果“或许多一点”的部分不是交易破坏者,那么你就是金色的。

答案 1 :(得分:1)

内核中的inotify documentation"每个[inotify]实例都与一个唯一的有序队列相关联。" 所以,我认为事件相关添加到给定实例(使用inotify_init()创建)的手表按照它们发生的顺序接收。