kqueueでファイルの状態を監視する

ファイルの状態を監視するために、Linuxならinotifyが簡単に使えるのだけれど、最近メインで使っているBSD系だとkqueueを使うしかなさそうなので、頑張って使ってみた。

C: sys/event.h

指定したファイルの変更と削除について監視する。


$ echo "foo" >> foo
$ echo "bar" >> foo
$ rm foo
$ ./test_kqueue
file was updated!
file was updated!
file was deleted!

Python: select

Pythonだとselectモジュールを使って、Cと同じように書ける。


$ echo "foo" >> foo
$ echo "bar" >> foo
$ rm foo
$ python test_kqueue.py
<select.kevent ident=3 filter=-4 flags=0x15 fflags=0x2 data=0x0 udata=0x0>
file was updated!
<select.kevent ident=3 filter=-4 flags=0x15 fflags=0x2 data=0x0 udata=0x0>
file was updated!
<select.kevent ident=3 filter=-4 flags=0x15 fflags=0x11 data=0x0 udata=0x0>
file was deleted!