【问题标题】: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_MODIFYIN_ATTRIB,都没有用。

是否可以通知第二种情况?

【问题讨论】:

    标签: c linux file inotify


    【解决方案1】:

    如果您覆盖文件,您将不会收到 IN_MODIFY 和 IN_ATTRIB 事件。因为,文件没有被修改,文件属性也没有改变。覆盖等于创建一个新文件。所以,你可以分别尝试这两个事件。

    IN_MODIFY:-

    此事件仅在文件被修改时发生。要通知此事件,您可以尝试更新或删除监视列表文件中的一些内容。

    IN_ATTRIB:-

    此事件仅在文件属性更改时发生。属性表示文件元数据。因此,如果要获取文件的此事件,可以在监视列表文件中更改文件权限。

    确保,你想看到这个事件,你必须在事件列表中添加以下事件,当你的 inotify 被初始化时。

    • In_MODIFY
    • IN_ATTRIB

    【讨论】:

    • 对于 inotify 时间戳不属于该属性,我不知道为什么。但我敢肯定,我曾尝试过这种情况。我正在更改文件的修改时间,但它不会给出 IN_ATTRIB 事件。而且我正在修改一个文件,那个时候文件修改时间也改变了。如果您想通过您的程序获得确切的事件,您可以尝试使用名为“inotifywait”的系统内置命令。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    • 2010-11-08
    • 2011-02-12
    相关资源
    最近更新 更多