Provided by: manpages-ja-dev_0.5.0.0.20161015+dfsg-1_all 

名前
fanotify_init - fanotify グループを作成し、初期化する
書式
#include <fcntl.h> #include <sys/fanotify.h> int fanotify_init(unsigned int flags, unsigned int event_f_flags);
説明
fanotify API の概要については fanotify(7) を参照。 fanotify_init() は新しい fanotify グループを初期化し、 このグループに関連付けられたイベントキューに対する ファイルディスクリプターを返す。 このファイルディスクリプターは、 fanotify_mark(2) の呼び出しで fanotify イベントが作成されるファイル、 ディレクトリ、 マウントを指定するのに使用できる。 fanotify_mark(2) で指定したファイル、 これらのイベント は、 このファイルディスクリプターからの読み出しで受信する。 いくつかのイベントは、 ファイルがアクセスされ たことを示す単なる情報である。 他のいくつかのイベントは、 別のアプリケーションがファイルやディレクトリに アクセスする許可を与えるかを判定するのに使用される。 ファイルシステムオブジェクトへのアクセス許可イベント については、 承認結果をこのファイルディスクリプターに書き込む。 複数のプログラムが同時に fanotify インターフェースを使って同じファイルを同時に監視することができる。 現在の実装では、 ユーザーあたりの fanotify グループ数は 128 に制限されている。 この制限は上書きすることが できない。 fanotify_init() を呼び出すには CAP_SYS_ADMIN ケーパビリティーが必要である。 この制約は将来のバージョンの API で緩和される可能性がある。 そのため、 以下に示すケーパビリティーチェックのいくつかが実装されている。 flags 引き数は、 イベントを待つアプリケーションの通知クラスを定義する複数ビットのフィールドである。 これ に加えて、 このファイルディスクリプターの動作を示す 1 ビットのフィールドがある。 アクセス許可イベントを監視しているプログラムが複数いる場合、 通知クラスを使って監視するプログラムのイベン ト受信順序が管理される。 以下の通知クラスのいずれか一つだけを flags に指定できる。 FAN_CLASS_PRE_CONTENT この値は、 ファイルがアクセスされたことを通知するイベントと、 ファイルへのアクセスするかの許可の判 断を求めるイベントを受信することを示す。 これはイベント受信者がファイルが最終的なデータを格納する 前にそのファイルにアクセスする必要がある場合に使用される。 この通知クラスは例えば階層型ストレージ 管理などで使用される。 FAN_CLASS_CONTENT この値は、 ファイルがアクセスされたことを通知するイベントと、 ファイルへのアクセスするかの許可の判 断を求めるイベントを受信することを示す。 これはイベント受信者がファイルに最終的なデータが格納され た際にそのファイルにアクセスする必要がある場合に使用される。 この通知クラスは例えばウイルス検知プ ログラムなどで使用される。 FAN_CLASS_NOTIF これはデフォルト値である。 この値を指定する必要はない。 この値は、 ファイルがアクセスされたことを 通知するイベントの受信だけを行うことを意味する。 ファイルがアクセスする前にアクセス許可の判定を行 うことはできない。 異なる通知クラスの受信者は FAN_CLASS_PRE_CONTENT, FAN_CLASS_CONTENT, FAN_CLASS_NOTIF の順序でイベントを受 信する。 同じ通知クラスの受信者での通知順序は不定である。 flags には以下のビットを追加でセットすることができる。 FAN_CLOEXEC close-on-exec フラグ (FD_CLOEXEC) を新しいファイルディスクリプターにセットする。 open(2) の O_CLOEXEC フラグの説明を参照。 FAN_NONBLOCK ノンブロッキングフラグ (O_NONBLOCK) をそのファイルディスクリプターで有効にする。 このファイルディ スクリプターからの読み出しは停止しない。 その代わり、 読みだし可能なデータが何もない場合、 read(2) はエラー EAGAIN で失敗する。 FAN_UNLIMITED_QUEUE そのイベントキューの 16384 イベントの上限を削除する。 このフラグを使用するには CAP_SYS_ADMIN ケー パビリティーが必要である。 FAN_UNLIMITED_MARKS 8192 マークの上限を削除する。 このフラグを使用するには CAP_SYS_ADMIN ケーパビリティーが必要であ る。 event_f_flags 引き数は fanotify イベントが作成されるオープンファイル記述にセットされるファイル状態フラグ を定義する。 これらのフラグの詳細については open(2) の flags 値の説明を参照のこと。 event_f_flags にはア クセスモードのビットを複数入れることができる。 このフィールドには以下の値も指定することができる。 O_RDONLY 読み出しアクセスのみを許可する。 O_WRONLY 書き込みアクセスのみを許可する。 O_RDWR 読み出しと書き込みの両方を許可する。 他のビットも event_f_flags もセットすることができる。 役立つであろう値は以下である。 O_LARGEFILE 2 GB を超えるファイルのサポートを有効にする。 このフラグのセットに失敗すると、 32 ビットシステムで fanotify グループが監視するラージファイルをオープンしようとした際に EOVERFLOW エラーとなる。 O_CLOEXEC このファイルディスクリプターで close-on-exec フラグを有効にする。 このフラグが役立つ理由については open(2) の O_CLOEXEC フラグの説明を参照。 O_APPEND, O_DSYNC, O_NOATIME, O_NONBLOCK, O_SYNC も指定することができる。 event_f_flags にこれ以外のフラ グを指定すると、 エラー EINVAL が起こる (ただし、バグを参照)。
返り値
成功すると fanotify_init() は新しいファイルディスクリプターを返す。 エラーの場合、 -1 を返し、 errno にエ ラーを示す値を設定する。
エラー
EINVAL flags か event_f_flags に無効な値が渡された。 FAN_ALL_INIT_FLAGS で flags に指定できる全ビットが定 義されている。 EMFILE このユーザーの fanotify グループ数が 128 を超過した。 ENOMEM 通知グループへのメモリー割り当てが失敗した。 ENOSYS このカーネルは fanotify_init() を実装していない。 fanotify API が利用できるのは、 カーネルが CONFIG_FANOTIFY を有効にして作成されている場合だけである。 EPERM 呼び出し元が CAP_SYS_ADMIN ケーパビリティーを持っていないので、操作が許可されない。
バージョン
fanotify_init() は Linux カーネルのバージョン 2.6.36 で導入され、 バージョン 2.6.37 で有効になった。
準拠
このシステムコールは Linux 独自である。
バグ
Linux 3.17 時点では、 以下のバグが存在する。 * O_CLOEXEC が event_f_flags に指定された場合、 無視される。 バージョン 3.14 より前の Linux カーネルには以下のバグが存在する。 * event_f_flags 引き数に無効なフラグがないかのチェックが行われない。 FMODE_EXEC などの内部での使用のみが 意図されたフラグを指定することができ、 その場合 fanotify ファイルディスクリプターからの読み出し時に返 されるファイルディスクリプターにそのフラグがセットされる。
関連項目
fanotify_mark(2), fanotify(7)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクトの説明とバグ報告 に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。