我使用kqueues/kevent(2)監視文件以查找單獨線程中的更改。 (我監視重新解析Python文件)Mac OS X上的kqueues:奇怪的事件順序
我同意如下:
EV_SET(&file_change, pyFileP, EVFILT_VNODE,
EV_ADD | EV_CLEAR,
NOTE_DELETE | NOTE_WRITE | NOTE_EXTEND |
NOTE_ATTRIB | NOTE_LINK | NOTE_RENAME | NOTE_REVOKE,
0, 0);
當我寫文件 「/tmp/somefile.py」 使用Vim的,我得到兩個不同的kevents: 這些事件的標誌(event.fflags)是:
NOTE_RENAME
和
NOTE_DELETE | NOTE_LINK
我永遠不會收到「NOTE_WRITE」事件! 這似乎有事情做用Vim寫這些文件的方式,因爲如果我這樣做
echo "sometext" >> /tmp/somefile.py
我得到的:
NOTE_WRITE|NOTE_EXTEND
事件。
奇怪的,呃?我沒有檢查Vim的源代碼,但它必須做一些奇怪的事情,還是僅僅使用以這種方式實現的用戶級功能?
我並沒有真正期待這一點。這是一個已知的問題,我只需要檢查所有可能的事件,或者是否有一個已知的接口來檢查文件是否被寫入?
謝謝,這解釋了它。但這有點問題。 – buddhabrot
確實。但是,你必須聽所有的事情嗎?您可以註冊NOTE_WRITE | NOTE_LINK和兩種情況(真正的追加,如來自外殼的回聲或新文件)都應該有效。 – sidyll
是的,我猜這套活動是安全的。謝謝您的幫助。 – buddhabrot