使用 inotify 检查监视文件夹中的文件是不是被覆盖
Posted
技术标签:
【中文标题】使用 inotify 检查监视文件夹中的文件是不是被覆盖【英文标题】:Using inotify to check if files in a watched folder are overwritten使用 inotify 检查监视文件夹中的文件是否被覆盖 【发布时间】:2016-05-20 03:15:49 【问题描述】:我编写了一个使用inotify
来监视特定文件夹的C 程序。我希望在此文件夹中创建新文件或现有文件被覆盖时收到通知(即文件夹已包含 a.txt
,我将 a.txt
的较新副本复制到此文件夹中,实质上是覆盖它) .
当使用IN_CREATE
掩码将新文件添加到此文件夹时,我能够生成通知,但在第二种情况下我没有收到任何通知。我试过IN_MODIFY
和IN_ATTRIB
,都没有用。
是否可以通知第二种情况?
【问题讨论】:
【参考方案1】:如果您覆盖文件,您将不会收到 IN_MODIFY 和 IN_ATTRIB 事件。因为,文件没有被修改,文件属性也没有改变。覆盖等于创建一个新文件。所以,你可以分别尝试这两个事件。
IN_MODIFY:-
此事件仅在文件被修改时发生。要通知此事件,您可以尝试更新或删除监视列表文件中的一些内容。
IN_ATTRIB:-
此事件仅在文件属性更改时发生。属性表示文件元数据。因此,如果要获取文件的此事件,可以在监视列表文件中更改文件权限。
确保,你想看到这个事件,你必须在事件列表中添加以下事件,当你的 inotify 被初始化时。
In_MODIFY IN_ATTRIB【讨论】:
对于 inotify 时间戳不属于该属性,我不知道为什么。但我敢肯定,我曾尝试过这种情况。我正在更改文件的修改时间,但它不会给出 IN_ATTRIB 事件。而且我正在修改一个文件,那个时候文件修改时间也改变了。如果您想通过您的程序获得确切的事件,您可以尝试使用名为“inotifywait”的系统内置命令。以上是关于使用 inotify 检查监视文件夹中的文件是不是被覆盖的主要内容,如果未能解决你的问题,请参考以下文章
inotify 是不是可以让我监视所有具有特定扩展名的文件,无论它们在磁盘上的啥位置?
哪些操作系统支持 Java 中的本机(类似 inotify)文件监视