kqueues/kevent(2) を使用して、別のスレッドでファイルの変更を監視します。(再解析のためにPythonファイルを監視しています)
私は次のように購読します:
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);
Vim を使用してファイル "/tmp/somefile.py" に書き込むと、2 つの別個の kevent を取得します。これらのイベント (event.fflags) のフラグは次のとおりです。
NOTE_RENAME
と
NOTE_DELETE | NOTE_LINK
「NOTE_WRITE」イベントは発生しません。これは、Vim がこれらのファイルを書き込む方法と関係があるようです。
echo "sometext" >> /tmp/somefile.py
私は得る:
NOTE_WRITE|NOTE_EXTEND
イベント。
変ですよね?Vim のソース コードはチェックしていませんが、何かおかしなことをしているに違いありません。
私は本当にこれを期待していませんでした。これは既知の問題ですか、考えられるすべてのイベントを確認する必要があるだけですか、それとも、ファイルが書き込まれたかどうかを実際に確認する既知のインターフェイスはありますか?