FANOTIFY_INIT(2) | Linux Programmer's Manual | FANOTIFY_INIT(2) |
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 の順序でイベントを受信する。 同じ通知クラスの受信者での通知順序は不定である。
flags には以下のビットを追加でセットすることができる。
event_f_flags 引き数は fanotify イベントが作成されるオープンファイル記述にセットされるファイル状態フラグを定義する。 これらのフラグの詳細については open(2) の flags 値の説明を参照のこと。 event_f_flags にはアクセスモードのビットを複数入れることができる。 このフィールドには以下の値も指定することができる。
他のビットも event_f_flags もセットすることができる。 役立つであろう値は以下である。
O_APPEND, O_DSYNC, O_NOATIME, O_NONBLOCK, O_SYNC も指定することができる。 event_f_flags にこれ以外のフラグを指定すると、 エラー EINVAL が起こる (ただし、バグを参照)。
成功すると fanotify_init() は新しいファイルディスクリプターを返す。 エラーの場合、 -1 を返し、 errno にエラーを示す値を設定する。
fanotify_init() は Linux カーネルのバージョン 2.6.36 で導入され、 バージョン 2.6.37 で有効になった。
このシステムコールは Linux 独自である。
Linux 3.17 時点では、 以下のバグが存在する。
バージョン 3.14 より前の Linux カーネルには以下のバグが存在する。
この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。
2014-10-02 | Linux |