Inotify:报告的事件与它们在文件系统中发生的顺序严格相同



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

我不确定这是否适用于同一inotify实例上不同文件系统上的watch,但可以很权威地说,这种技术在一般情况下确实有效:我们在Watchman中使用它(我们在这里描述它:https://facebook.github.io/watchman/docs/cookies.html)

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

根据您的确切用例,您可以在每个文件系统中使用一个实例,并在您的时间T触及每个文件系统根目录中的一个特殊文件。如果您已经观察到这两个特殊文件的更改,那么您知道您已经看到了时间T之前的所有内容,甚至更多。如果"也许再多一点点"这句话不会让你失望,那么你就成功了。

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

最新更新