我正在使用 inotify 来监控各种分区上的各种目录(可能位于不同的硬盘上)。为了确保收集到某个时间点 T 之前发生的所有事件,我正在触摸我的主目录中的特殊文件并等待 inotify 报告这个修改。收到此通知后,我是否可以确定在 T (所有目录和所有分区)之前我还收到了所有修改的所有事件?
答案 0 :(得分:2)
我不确定这是否适用于同一个inotify实例中不同文件系统上的监视,但可以肯定地说该技术通常有效:我们在Watchman中使用它(我们在这里描述它:{{3} })
我们假设这不会在文件系统边界之间正确排序,并且每个观察的根创建一个实例;这使我们更容易正确地跟踪和关联事件。我们还必须处理fsevents,kqueue和其他观察实现,因此我们尽量避免与底层实现过于紧密耦合。
根据您的确切用例,您可以在每个文件系统中使用一个实例,并在您的时间T触摸每个文件系统根目录中的特殊文件。前提是您已经观察到了两个特殊文件变化,你知道你已经看到了所有的时间T,也许还有一点点。如果“或许多一点”的部分不是交易破坏者,那么你就是金色的。
答案 1 :(得分:1)
内核中的inotify documentation说"每个[inotify]实例都与一个唯一的有序队列相关联。" 所以,我认为事件相关添加到给定实例(使用inotify_init()创建)的手表按照它们发生的顺序接收。