inotify不发射文件修改通知

我一直在调整这里的例子,使其重复观看“修改”的文件。 我的代码在这里 。 在我的testing中,inotify通知只是在文件第一次被修改时触发(即touch )。 对该文件的任何后续修改都不会导致任何通知触发。 stat显示“修改”时间已经改变。 此外,修改代码以删除手表,并重新添加每次通知触发(即将inotify_add_watchinotify_rm_watch移到我的示例中的while(1)循环内)并不能帮助解决此问题。

我想知道这里有没有人可以帮助我做错什么。 另外,虽然我为IN_ALL_EVENTS添加了一块手表,但我只关心IN_MODIFY事件。 不知道这是否有任何区别。

另外,这个用例不起作用吗? 我应该改变我的方法来观看目录吗? 请指教。

TIA。

编辑1:正如由themel指出的, i的处理需要一些修复。 但是即使是固定版本也不会为后续的文件系统“事件”发射通知。 另外,在目录中添加一个监视器而不是文件会显示类似的非确定性行为。

编辑2:我想得到这个基于这个答案工作的asio + inotify示例 。 不幸的是,这个例子并没有为我工作。 任何帮助将非常感激。 TIA。

在themel的修复之后,你的代码在我的测试中看着一个目录时工作的很好。 在观看文件时, event->len是零,你的代码忽略了通知。

通过在printf语句中将event->len删除并将所有event->name替换为file_path ,在观看文件时也可以正常工作。

PS:刚才注意到你提到touch

touch发送以下事件:

 IN_OPEN IN_ATTRIB IN_CLOSE_WRITE 

没有IN_MODIFY

另外,不要用vim编辑修改,就像我刚刚做的那样 – 在洗牌工作副本和交换(删除手表)时删除文件。 pico作品。

你对i处理被破坏,你永远不会在循环中将它重置为0。 这会导致任何后来的inotify事件,只有当他们比在他们之前最长的事件,这不可能是你想要的时间被考虑。

固定版本 。

当监视一个单独的文件事件 – > len将为0,因为文件名不被返回。 我注意到很多示例程序都有这个问题。