inotify不会在文件修改时触发通知

dec*_*tle 6 c++ linux filesystems inotify

我一直在调整的例子在这里,使其反复观看了"修改"的文件.我的代码在这里.在我的测试中,inotify通知仅在文件第一次被"修改"(即touch'ed)时触发.对文件的任何后续修改都不会导致触发任何通知.stat显示"修改"时间已更改.此外,修改代码以删除手表并在每次通知触发时重新添加(即移动inotify_add_watchinotify_rm_watch进入while(1)我的样本中的循环内)并没有帮助解决此问题.

我想知道这里有没有人可以帮助解决我可能做错的事情.此外,虽然我已经添加了一块手表IN_ALL_EVENTS,但我真的只关心IN_MODIFY事件.不确定这是否有所不同.

此外,这个用例不起作用吗?我应该改变观察目录的方法吗?请指教.

TIA.

编辑1:正如themel所述,处理i需要一些修复.但是,即使是固定版本也不会为后续文件系统"事件"触发通知.此外,在目录上添加监视而不是文件表现出类似的非确定性行为.

编辑2:我想根据这个工作答案得到这个asio + inotify示例.不幸的是,这个例子根本不适用于我.任何帮助将非常感激.TIA.

Cub*_*bbi 5

在主题修复之后,在我的测试中,在查看目录时,您的代码可以正常工作.观看文件时,event->len为零,您的代码会忽略通知.

通过printf语句中的event->len删除测试和全部event->name替换,file_path在查看文件时也能正常工作.

PS:刚刚注意到你提到了touch.

touch 发送以下事件:

IN_OPEN
IN_ATTRIB
IN_CLOSE_WRITE
Run Code Online (Sandbox Code Playgroud)

没有IN_MODIFY

另外,不要vim像我刚才那样通过编辑来测试修改- 它会在洗牌工作副本和交换时删除文件,从而删除手表.pico作品.