ファイル/ディレクトリの変更監視用システムコール。昔は dnotify というシステムコールがあったがその改良版として 2.6.13 から導入されたらしい。
ノウハウ
- (xubuntu9.10環境だけかもしれないが)監視対象にファイルを指定すると IN_MODIFY の通知イベントが二つくる。謎。
- 監視対象にディレクトリを指定する分にはちゃんと一つずつ通知されるので、通常はディレクトリ単位で指定するのが良さそうに思える。
- 以下3点を実装することで監視できる。
- inotify初期化
- 監視対象追加
- 監視開始(必要であれば繰り返す)
- inotifyのディスクリプタは通常のファイルディスクリプタとして扱えるので、poll(2)系のシステムコールを使ってI/Oイベントとして実装できる。
サンプルコード
LINUXシステムプログラミング のまんまですが、以下のような感じで /tmp 配下のファイルに変更があり次第システムログに出力します。
以下は ruby 実装版。 rb-inotify (0.7.0) を使っています。