2016-05-20 67 views
0

我已經編寫了一個使用inotify來觀察特定文件夾的C程序。我希望在此文件夾中創建新文件時通知我,或者如果覆蓋現有文件(即文件夾已包含a.txt,並且我將a.txt的較新副本複製到此文件夾中,本質上將其覆蓋)。使用inotify檢查觀察文件夾中的文件是否被覆蓋

我可以使用IN_CREATE掩碼將新文件添加到此文件夾時生成通知,但我沒有收到有關第二種方案的任何通知。我試過IN_MODIFYIN_ATTRIB,都沒有工作。

是否可以通知第二種情況?

回答

1

如果覆蓋文件,您將不會收到IN_MODIFY和IN_ATTRIB事件。因爲該文件沒有被修改,並且文件屬性也沒有改變。被覆蓋等於創建一個新文件。所以,你可以嘗試兩個單獨的事件。

IN_MODIFY: -

只有當文件被修改時發生此事件。要通知此事件,您可以嘗試更新或刪除觀看列表文件中的某些內容。

IN_ATTRIB: -

僅在文件屬性改變時發生此事件。屬性是指文件元數據。所以,如果您想爲文件獲取此事件,則可以更改觀看列表文件中的文件權限。

請確保您希望看到此事件,您必須在事件列表中添加以下事件,當您初始化inotify時。

  • IN_MODIFY
  • IN_ATTRIB
+0

對於inotify的時間戳不是屬性下來臨的時候,我不知道爲什麼。但我確信,我曾試過這種情況。我正在改變文件的修改時間,但它不會給IN_ATTRIB事件。而且我還修改了一個文件,那個時候文件修改時間也改變了。如果你想用你的程序得到確切的事件,你可以嘗試使用名爲「inotifywait」命令的系統。 –