4

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

4

2 回答 2

3

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

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

根据您的确切用例,您可能能够在每个文件系统中使用一个实例,并在您的时间 T 触摸每个实例的根目录中的一个特殊文件。假设您已经观察到您的两个特殊文件更改,您知道你已经看到了 T 之前的所有内容,也许还有更多。如果“可能更多”部分不是交易破坏者,那么你就是黄金。

于 2014-05-22T06:05:11.007 回答
2

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

于 2014-05-21T09:22:55.133 回答