Inotify

inotify (inode notify) とは、ファイルシステムへの変更を通知するようファイルシステムを拡張して、その変更をアプリケーションに報告するLinuxカーネルサブシステムである。inotifyに先行して存在し、類似の目標を持つは、inotifyに取って代わられている。
inotifyはJohn McCutchanが作成し、2005年8月29日にリリースされたLinuxカーネルのバージョン2.6.13で、inotifyはLinuxカーネルメインラインにマージされた。以降のバージョンのLinuxカーネルでは、inotifyはさらに改良されている。GNU Cライブラリ (glibc) では、inotifyに必要なライブラリインタフェースは2006年3月にリリースされたバージョン2.4で追加され、2006年9月にリリースされたバージョン2.5でinotifyを完全にサポートした。
inotifyの主な用途の1つとしては、Beagleなどのデスクトップ検索ユーティリティが挙げられる。inotifyの機能により、数分おきにファイルシステム変更をスキャンするといった非常に効率が悪い作業をせずに、変更されたファイルのが可能となる。
inotifyは、ディレクトリビューの自動更新、設定ファイルの再読み込み、ログの変更、バックアップ、同期、アップロードなどにも使える。
制限.
inotifyにより課される制限は以下の通りである:
dnotifyに対する利点.
inotifyには先行して存在する APIと比べて利点が多いため、dnotifyはinotifyに置き換えられている。dnotifyを使う場合、プログラムは監視用としてディレクトリ毎に1つのファイル記述子を使う必要があるため、プロセス毎のファイル記述子制限に到達した場合にボトルネックとなってしまう。後にこの問題を克服したfanotifyが作られた。さらにリムーバブルメディア使用時にdnotifyがファイル記述子を使うと問題があることも判明した。ファイル記述子はリソースをビジー状態に維持するため、デバイスをアンマウントできないからである。
その他のdnotifyの欠点としては、dnotifyの粒状性レベルが挙げられる。プログラマはディレクトリレベルでしか変更を監視できない。通知メッセージが送られた場合に発生する環境の変更に対する詳細な情報にアクセスするためにはstat構造体を使う必要があるが、stat構造体の使用は必要悪とされる。新規に生成されたstat構造体とそれに対応するキャッシュされたstat構造体との比較が、stat構造体が新規生成される度に行われるからである。
inotify APIはプログラマに対し、dnotifyが使うシグナル通知システムではなく、定着したselectとpollインターフェイスを使えるようにしているため、inotify APIが使うファイル記述子はdnotifyが使うそれよりもはるかに少ない。これにより、inotify APIを（GLibなどの）既存のselectやpollベースのライブラリと統合しやすい。