kqueues/kevent (2)를 사용하여 파일의 변경 사항을 별도의 스레드에서 모니터합니다. 나는 다음과 같은 가입Mac OS X의 kqueues : 이상한 이벤트 순서
(내가 파이썬 파싱의 파일 모니터) :
I 파일 "/tmp/somefile.py"에 기록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);
은 빔을 사용하여, 나는 두 개의 별도 kevents를 얻을 : 이러한 이벤트의 플래그 (event.fflags)는 다음과 같습니다
NOTE_RENAME
및
NOTE_DELETE | NOTE_LINK
,536,
"NOTE_WRITE"이벤트가 발생하지 않습니다!
NOTE_WRITE|NOTE_EXTEND
이벤트를 : 나는
echo "sometext" >> /tmp/somefile.py
을한다면 나는 어떻게해야합니까 이후 이, 빔이 파일을 기록하는 방법을 할 수있는 뭔가가 보인다.
이상한가? Vim 소스 코드를 검사하지는 않았지만 이상한 일을해야합니까? 아니면 단순히 그런 식으로 구현 된 사용자 수준 함수를 사용합니까?
정말 기대하지 않았습니다. 이 문제는 알려진 문제인지, 가능한 모든 이벤트를 확인하거나 파일이 작성되었는지 실제로 확인하는 알려진 인터페이스가 있습니까?
감사합니다. 이것은 조금 문제가 있습니다. – buddhabrot
실제로. 하지만 모든 행사에 귀를 기울여야합니까? NOTE_WRITE에 등록 할 수 있습니다 | NOTE_LINK와 두 경우 모두 (셸의 echo와 같은 실제 추가 또는 새 파일) 작동해야합니다. – sidyll
네, 이벤트 세트가 안전하다고 생각합니다. 도와 주셔서 감사합니다. – buddhabrot