INOTIFY_ADD_WATCH(2)

名前
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/ に書かれている。