inotify_add_watch - 初期化済み inotify
インスタンスに監視対象を追加する
#include <sys/inotify.h>
int inotify_add_watch(int fd, const char
*pathname, uint32_t mask);
inotify_add_watch() は、
pathname
で指定された位置にあるファイルを監視する監視アイテム
(watch) の新規追加、
または既存の監視アイテムの変更を行う。
呼び出し元は、監視対象のファイルに対する読み出し許可を
持っていなければならない。
fd
引数は、変更を行う監視対象リスト
(watch list) を持つ inotify
インスタンスを参照するファイルディスクリプターである。
pathname
のどのイベントを監視するかは、引数のビットマスク
mask で指定する。
mask
に設定できるビットの説明については
inotify(7) を参照のこと。
inotify_add_watch()
の呼び出しが成功すると、
pathname
に対応するファイルシステムオブジェクト
(inode) に対する、
一意な監視対象ディスクリプター
(watch descriptor) を、 対象の inotify
インスタンスに対して返す。
そのファイルシステムオブジェクトが対象の
inotify
インスタンスによって以前に監視されていない場合には、
監視対象ディスクリプターは新規に割り当てられる。
ファイルシステムオブジェクトが
(おそらく同じオブジェクトに対する異なるリンク経由で)
すでに監視されている場合には、
既存の監視に対するディスクリプターが返される。
これ以降に inotify
ファイルディスクリプターから
read(2)
を行うと、監視対象ディスクリプターが返される。
これらの
read()
を行うと、ファイルシステムイベントを示す
inotify_event
構造体が読み出される
(
inotify(7)
参照)。この構造体内の監視対象ディスクリプターにより、
どのオブジェクトでそのイベントが発生したかを特定できる。
成功すると、
inotify_add_watch()
は非負の監視対象ディスクリプター
(非負の整数) を返す。
エラーの場合、-1
を返し、
errno
を適切に設定する。
- EACCES
- 指定されたファイルに対する読み出しアクセスが許可されていない。
- EBADF
- 指定されたファイルディスクリプターが有効ではない。
- EEXIST
-
mask contains IN_MASK_CREATE and
pathname refers to a file already being watched by the same
fd.
- EFAULT
-
pathname
が指すアドレスがプロセスがアクセスできるアドレス空間外である。
- EINVAL
- The given event mask contains no valid events; or
mask contains both IN_MASK_ADD and IN_MASK_CREATE; or
fd is not an inotify file descriptor.
- ENAMETOOLONG
-
pathname
が長過ぎる。
- ENOENT
-
pathname
のディレクトリ部分の構成要素が、存在しないか、
リンク切れのシンボリックリンクである。
- ENOMEM
- カーネルメモリーが十分になかった。
- ENOSPC
- inotify
監視対象の総数がユーザーが追加できる上限に達していた。
もしくは、必要な資源の割り当てにカーネルが失敗した。
- ENOTDIR
-
mask contains IN_ONLYDIR and pathname
is not a directory.
inotify は Linux カーネル 2.6.13
に組み込まれた。
このシステムコールは
Linux 独自である。
inotify(7) 参照。
inotify_init(2),
inotify_rm_watch(2),
inotify(7)
この man ページは Linux
man-pages
プロジェクトのリリース
5.10
の一部である。プロジェクトの説明とバグ報告に関する情報は
https://www.kernel.org/doc/man-pages/
に書かれている。