inotify針對vim gedit類的檔案監控

2021-06-07 09:19:23 字數 919 閱讀 6443

想弄個監控檔案是否被修改的子程式,在windows下,我是用的win32_find_data和findfirstfile 這兩個api,到了linux下面,準備轉成inotify,結果在這搞笑了~~

關於inotify的機制,很多人都講過,我就不多說了。我這出現的問題是:

對檔案是否被修改進行判斷,需要用到inotify的in_modify檔案系統事件。然而,我用gedit對該檔案進行修改,不管怎麼弄,都無法得到in_modify事件,而會得到in_ignored事件(10進製值是 32768)。之後,inotify就不再通知任何檔案事件了!可是如果用別的方法編輯檔案,比如用輸出重定向》,檔案的修改事件是可以正確得到的!

要搞明白這個奇怪的現象,需要知道vim,gedit類的文字編輯程式的工作原理。這些編輯器在編輯檔案時,實際上是在該檔案的乙個副本中進行編輯的。當使用者儲存檔案時,編輯器先對原檔案進行了刪除操作,隨後將副本重新命名為原檔案。

由於編輯器先刪除了原檔案,inotify發現了檔案被刪除了,馬上就會把針對該檔案的watch刪掉,所以inotify通知了in_ignored事件後就不再通知任何事件了!

不過還好有in_ignored事件,我們還是可以做一些補救!

下面是我的**:

#include #include #include #define max_buf_size 1024  

int main()

wd = inotify_add_watch(fd, path, in_modify);

if(wd < 0)

while(index>0)

}

return 0;

}

wd = inotify_add_watch(fd, path, in_modify);  

這樣後面就可以繼續監視了。

inotify不生效問題

inotify還是不錯的,玩著似乎很簡單,但是坑也不少,如果不仔細檢視官方文件,可能就真的不知道 存在坑,需要注意。前段時間,在專案中使用inotify監控配置檔案,以達到實時感知配置改變的目的。但近日檢視線上日誌發現,配置檔案改變後,inotify並沒有通知,結果導致配置一直未被更改。在描述之前,...

inotify安裝配置

1 從核心和目錄裡面檢視是否支援inotify uname r 2 檢查是否有安裝inotify 如果沒有就安裝 rpm qa inotify tools 沒有就先安裝epol源 wget o etc yum.repos.d epel.repo 之後安裝 yum install inotify to...

inotify事件監控工具

inotify事件監控工具 inotify是一種非同步的檔案系統事件監控機制軟體,通過inotify可以監控檔案系統中新增,刪除,修改,移動等各種事件,利用這個核心介面,第三方軟體就可以監控檔案系統性檔案的各種變化情況。inotify的軟體版本 1 inotify tools 2 sersync 3...