移动文件后,inotify将发出IM_MOVE_FROM
,IN_MOVE_TO
或两者。事件中有一个cookie字段,其值允许我们确定链接的事件。
未指定的内容是关联的MOVE
事件的顺序以及MOVE_TO
是否始终直接跟随链接MOVE_FROM
(如果两者都已发布)。
他们之间可能还有其他事件吗?
如果是,可能会混合多个MOVE
个事件对吗?
答案 0 :(得分:0)
我知道这不是你确切问题的权威性答案,但我想分享我们在watchman code中所做的事情,这是在大量拥有大量文件的Linux机器上经过严峻考验的高变化率。
我们在防守方面做出以下假设:
因为我们有点悲观,而且inotify文档中的措辞含糊不清,我们会记录cookie - >在地图中移动信息,这样我们就不会在MOVE_FROM之后直接使用MOVE_TO。它也有点复杂,因为MOVE_FROM可能是一次读取时读取缓冲区中的最后一个数据,MOVE_TO可能是后续读取的第一个数据。
每当我们消耗了inotify流中的所有可用数据时,我们就会清除地图(例如:非阻塞读取返回0字节)。该地图中的任何内容都在上面的(3.)类别中,并且将来不会出现。