IN_MOVE_TO 是不是直接跟随 inotify 中的 IN_MOVE_FROM?

Posted

技术标签:

【中文标题】IN_MOVE_TO 是不是直接跟随 inotify 中的 IN_MOVE_FROM?【英文标题】:Does IN_MOVE_TO directly follow a IN_MOVE_FROM in inotify?IN_MOVE_TO 是否直接跟随 inotify 中的 IN_MOVE_FROM? 【发布时间】:2016-09-30 11:40:13 【问题描述】:

移动文件时,inotify 将发出IM_MOVE_FROMIN_MOVE_TO 或两者。事件中有一个 cookie 字段,其值允许我们确定链接的事件。

未指定的是链接的MOVE 事件的顺序以及MOVE_TO 是否总是直接跟随链接的MOVE_FROM(如果两者都发出)。

他们之间可能还有其他事件吗?

如果是,是否有多个 MOVE 事件对混在一起?

【问题讨论】:

【参考方案1】:

我知道这不是对您的确切问题的权威答案,但想分享我们在 watchman code 中所做的事情,它在大量具有大量文件和高变化率。

我们防御性地做出以下假设:

    MOVE_FROM 位于 MOVE_TO 之前 我们可能得不到 MOVE_FROM 我们可能得不到 MOVE_TO

因为我们有点悲观,并且 inotify 文档中的措辞模棱两可,我们将 cookie -> 移动信息记录在地图中,这样我们就不会依赖 MOVE_TO 直接在 MOVE_FROM 之后出现。它也有点复杂,因为 MOVE_FROM 可能是一次读取时适合您的读取缓冲区的最后一个数据,而 MOVE_TO 可能是后续读取的第一个数据。

每当我们消耗了 inotify 流中的所有可用数据时,我们都会清除映射(例如:非阻塞读取返回 0 字节)。该地图中的任何内容都属于上述 (3.) 类别,并且将来不会显示。

【讨论】:

感谢您的回答。这很有帮助。这并不容易,但是您处理它的方式可以涵盖所有情况。当您处理完事件并且地图不为空时,您是否执行非阻塞读取以检查是否还有更多事件?你如何确定 MOVE_TO 是否缺席?在非常密集的 inotify 活动(创建/删除 10000 个文件)的情况下,您可能需要等待很长时间,直到发生读取 0 事件。有超时吗?如果我们可以假设 MOVE_TO 立即跟随 MOVE_FROM 如果存在(最终在下一个读取事件批次中),那就更简单了。 我链接到了代码,这样您就可以看到我们为自己做了什么。 Watchman 的模型是不直接跟踪重命名,所以理想情况下我们会忽略这一点。但是,我们必须做一些基本的跟踪来了解 inotify 何时单方面更改了监视描述符 -> 名称映射。

以上是关于IN_MOVE_TO 是不是直接跟随 inotify 中的 IN_MOVE_FROM?的主要内容,如果未能解决你的问题,请参考以下文章

QPushButton:如何知道“释放”信号是不是会跟随“点击”信号?

运算符 OR 是不是对跟随它的参数的位置敏感

ARKit 大型模型跟随相机而不是保持静止

AD转换器输入之前为何要接一个电压跟随器?

Unity相机跟随小结

如何让 Angular 组件动画跟随 CSS 类的变化,而不是静态样式?