最終更新:2016-09-15 (木) 15:59:28 (2778d)
inotify
Top / inotify
Linux 2.6.13? カーネルから Linux に組み込まれた inotify により、 監視プログラムは 1 つのファイル記述子を開くだけで、1 つ以上のファイルやディレクトリでオープン、クローズ、移動/名前変更、削除、作成、属性の変更などといった指定のイベント一式を監視できるようになりました。
インストール
sudo apt-get install inotify-tools
システムコール
- inotify_init
- inotify_add_watch
- [inotify_rm_watch]]
イベントの構造体
struct inotify_event { int wd; /* Watch descriptor. */ uint32_t mask; /* Watch mask. */ uint32_t cookie; /* Cookie to synchronize two events. */ uint32_t len; /* Length (including NULs) of name. */ char name __flexarr; /* Name. */ };
イベント
- inotify_add_watchの mask 引き数と、inotifyファイル構造体をreadしたときに返される inotify_event?構造体の mask フィールドのビットマスク
IN_ACCESS? 監視対象の項目、または監視対象ディレクトリー内のファイルやサブディレクトリーへのアクセスが行われたことを示すイベント。例えば、開いているファイルの読み取りなど。 read, execve IN_MODIFY? 監視対象の項目、または監視対象ディレクトリー内のファイルやサブディレクトリーが変更されたことを示すイベント。例えば、開いているファイルの更新などです。 write,truncate? IN_ATTRIB? 監視対象の項目、または監視対象ディレクトリー内のファイルやサブディレクトリーで、メタデータが変更されたことを示すイベント。例えば、タイムスタンプまたはアクセス権の変更などです。 chmod,utimensat?,setxattr?,unlink,chown IN_CLOSE_WRITE? 書き込み用に開いていたファイルまたはディレクトリーが閉じられたことを示すイベント。 close? IN_CLOSE_NOWRITE? 読み取り専用で開いていたファイルまたはディレクトリーが閉じられたことを示すイベント。 IN_CLOSE? 上記の 2 つのイベント (IN_CLOSE_WRITE と IN_CLOSE_NOWRITE) の論理 OR となる便利なマスクです。 IN_OPEN? ファイルまたはディレクトリーが開かれたことを示すイベント。 open IN_MOVED_FROM? 監視対象の項目、または監視対象ディレクトリー内のファイルやサブディレクトリーが監視位置から移動されたことを示すイベント。このイベントには、IN_MOVED_FROM と IN_MOVED_TO を相互に関連付けられるようにする cookie も組み込まれます。 IN_MOVED_TO? ファイルまたはディレクトリーが監視位置に移動されたことを示すイベント。このイベントには、IN_MOVED_FROM の場合と同じく cookie が組み込まれます。ファイルまたはディレクトリーの名前が変更されただけの場合には、IN_MOVED_TO と IN_MOVED_FROM の両方のイベントが示されます。監視していない位置に移動、またはそこから移動された場合には、一方のイベントしか示されません。監視対象の項目を移動または名前変更した場合、監視は続行されます。以下の IN_MOVE_SELF を参照してください。 IN_MOVE? 上記の 2 つの移動イベント (IN_MOVED_FROM と IN_MOVED_TO) の論理 OR となる便利なマスクです。 IN_CREATE? 監視対象のディレクトリー内にサブディレクトリーまたはファイルが作成されたことを示すイベント。 open(O_CREAT),mkdir,link?,symlink?, UNIX ドメインソケットに対する bind IN_DELETE? 監視対象のディレクトリー内のサブディレクトリーまたはファイルが削除されたことを示すイベント。 IN_DELETE_SELF? 監視対象の項目自体が削除されたことを示すイベント。監視は終了し、IN_IGNORED イベントを受け取ります。 IN_MOVE_SELF? 監視対象の項目自体が移動されたことを示すイベント。
関連
- イベント監視?