Provided by: manpages-ja-dev_0.5.0.0.20180315+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/ に書かれている。
Linux 2014-10-02 FANOTIFY_INIT(2)