名 前
fanotify_mark − フ ァ イ ル シ ス テ ム オ ブ ジ ェ ク ト へ の fanotify マ ー ク の 追 加 、 削 除 、 変 更
書 式
#include <sys/fanotify.h>
int
fanotify_mark(int fanotify_fd, unsigned
int flags,
uint64_t mask, int dirfd, const
char *pathname);
説 明
fanotify API の 概 要 に つ い て は fanotify(7) を 参 照 。
fanotify_mark(2) は フ ァ イ ル シ ス テ ム オ ブ ジ ェ ク ト に 対 す る fanotify マ ー ク の 追 加 、 削 除 、 変 更 を 行 う 。 呼 び 出 し 元 は マ ー ク を 付 け る フ ァ イ ル シ ス テ ム オ ブ ジ ェ ク ト に 対 す る 読 み 出 し 許 可 を 持 っ て い な け れ ば な ら な い 。
fanotify_fd 引 き 数 は fanotify_init(2) で 返 さ れ た フ ァ イ ル デ ィ ス ク リ プ タ ー で あ る 。
flags
は 実 行 す る 操
作 内 容 を 示 す
ビ ッ ト マ ス ク
で あ る 。 以 下
の 値 の い ず れ
か 一 つ だ け を
指 定 し な け れ
ば な ら な い 。
FAN_MARK_ADD
mask の イ ベ ン ト を mark マ ス ク (も し く は ignore マ ス ク ) に 追 加 す る 。 mask は 空 で あ っ て は い け な い 。 空 の 場 合 は エ ラ ー EINVAL が 発 生 す る 。
FAN_MARK_REMOVE 引
き 数 mask の イ ベ
ン ト を mark マ ス ク
(も し く は ignore マ
ス ク ) か ら 削 除
す る 。 mask は 空
で あ っ て は い
け な い 。 空 の
場 合 は エ ラ ー
EINVALが 発 生 す る
。
FAN_MARK_FLUSH
fanotify グ ル ー プ か ら 全 て の マ ウ ン ト mark か 全 て の マ ウ ン ト 以 外 の mark を 削 除 す る 。 flag に FAN_MARK_MOUNT が 含 ま れ る 場 合 、 マ ウ ン ト に 対 す る 全 て の mark が そ の グ ル ー プ か ら 削 除 さ れ る 。 含 ま れ な い 場 合 は 、 デ ィ レ ク ト リ と フ ァ イ ル に 対 す る 全 て の mark が 削 除 さ れ る 。 FAN_MARK_MOUNT 以 外 の フ ラ グ を FAN_MARK_FLUSH と 組 み 合 わ せ て 使 う こ と は で き な い 。 mask は 無 視 さ れ る 。 上 記 の ど の 値 も 指 定 さ れ な か っ た 場 合 、 ま た は 2 つ 以 上 の 値 が 指 定 さ れ た 場 合 、 呼 び 出 し は エ ラ ー EINVAL で 失 敗 す る 。 こ れ に 加 え て 、 flags に 以 下 の 値 を 0 個 以 上 ビ ッ ト 単 位 の 論 理 和 (OR) で 指 定 で き る 。
FAN_MARK_DONT_FOLLOW
pathname が シ ン ボ リ ッ ク リ ン ク の 場 合 、 リ ン ク が 参 照 す る フ ァ イ ル で は な く 、 リ ン ク 自 身 に マ ー ク を 付 け る (デ フ ォ ル ト で は fanotify_mark() は pathname が シ ン ボ リ ッ ク リ ン ク の 場 合 シ ン ボ リ ッ ク リ ン ク の 展 開 を 行 う )。
FAN_MARK_ONLYDIR
マ ー ク が 付 け
ら れ た フ ァ イ
ル シ ス テ ム オ
ブ ジ ェ ク ト が
デ ィ レ ク ト リ
で な い 場 合 、
エ ラ ー ENOTDIR が 発
生 す る 。
FAN_MARK_MOUNT
pathname で 指 定 さ れ た マ ウ ン ト ポ イ ン ト に マ ー ク を 付 け る 。 pathname が マ ウ ン ト ポ イ ン ト 自 身 で は な い 場 合 、 pathname を 含 む マ ウ ン ト ポ イ ン ト が マ ー ク さ れ る 。 マ ウ ン ト ポ イ ン ト に 含 ま れ る 全 て の デ ィ レ ク ト リ 、 サ ブ デ ィ レ ク ト リ 、 そ の 中 の フ ァ イ ル が 監 視 さ れ る 。
FAN_MARK_IGNORED_MASK
mask の イ ベ ン ト の ignore マ ス ク へ の 追 加 、 も し く は 削 除 を 行 う 。
FAN_MARK_IGNORED_SURV_MODIFY
ignore マ ス ク は 変 更 イ ベ ン ト が 発 生 し て も 残 り 続 け る 。 こ の フ ラ グ が セ ッ ト さ れ て い な い 場 合 、 無 視 す る フ ァ イ ル や デ ィ レ ク ト リ に 対 し て 変 更 イ ベ ン ト が 発 生 し た 際 に ignore マ ス ク は ク リ ア さ れ る 。
mask
は ど の イ ベ ン
ト に 対 し て 通
知 を 受 け る か
(も し く は ど の
イ ベ ン ト を 無
視 す る か ) を 定
義 す る 。 以 下
の 値 か ら 構 成
さ れ る ビ ッ ト
マ ス ク で あ る
。
FAN_ACCESS フ ァ イ ル や
デ ィ レ ク ト リ
へ の ア ク セ ス
(読 み 出 し ) が あ
っ た 際 に イ ベ
ン ト を 作 成 す
る (「 バ グ 」 も
参 照 )。
FAN_MODIFY フ ァ イ ル が
変 更 さ れ た (書
き 込 み ) 際 に イ
ベ ン ト を 作 成
す る 。
FAN_CLOSE_WRITE 書 き 込 み
可 能 フ ァ イ ル
が ク ロ ー ズ さ
れ た 際 に イ ベ
ン ト を 作 成 す
る 。
FAN_CLOSE_NOWRITE 読 み 出 し
専 用 の フ ァ イ
ル や デ ィ レ ク
ト リ が ク ロ ー
ズ さ れ た 際 に
イ ベ ン ト を 作
成 す る 。
FAN_OPEN フ ァ イ ル や
デ ィ レ ク ト リ
が オ ー プ ン さ
れ た 際 に イ ベ
ン ト を 作 成 す
る 。
FAN_OPEN_PERM フ ァ イ ル
や デ ィ レ ク ト
リ を オ ー プ ン
す る ア ク セ ス
許 可 が 要 求 さ
れ た 際 に イ ベ
ン ト を 作 成 す
る 。 fanotify フ ァ イ
ル デ ィ ス ク リ
プ タ ー が
FAN_CLASS_PRE_CONTENT か
FAN_CLASS_CONTENT を 指 定 さ
れ て 作 成 さ れ
て い る 必 要 が
あ る 。
FAN_ACCESS_PERM フ ァ イ ル
や デ ィ レ ク ト
リ を 読 み 出 す
ア ク セ ス 許 可
が 要 求 さ れ た
際 に イ ベ ン ト
を 作 成 す る 。
fanotify フ ァ イ ル デ
ィ ス ク リ プ タ
ー が FAN_CLASS_PRE_CONTENT か
FAN_CLASS_CONTENT を 指 定 さ
れ て 作 成 さ れ
て い る 必 要 が
あ る 。
FAN_ONDIR デ ィ レ ク ト
リ に 対 す る イ
ベ ン ト を 作 成
す る 。 例 え ば
opendir(3)、 readdir(3) (た
だ し 「 バ グ 」
も 参 照 )、 closedir(3)
が 呼 び 出 さ れ
た 場 合 。 こ の
フ ラ グ が 指 定
さ れ な か っ た
場 合 、 フ ァ イ
ル に 対 す る イ
ベ ン ト だ け が
作 成 さ れ る 。
FAN_EVENT_ON_CHILD マ ー ク さ
れ た デ ィ レ ク
ト リ の 直 下 の
エ ン ト リ ー に
対 し て イ ベ ン
ト を 作 成 す る
。 こ の フ ラ グ
は マ ウ ン ト に
マ ー ク を 付 け
る 際 に は 効 果
は な い 。 マ ー
ク さ れ た デ ィ
レ ク ト リ の サ
ブ デ ィ レ ク ト
リ の エ ン ト リ
ー に 対 し て は
イ ベ ン ト が 作
成 さ れ な い 点
に 注 意 す る こ
と 。 デ ィ レ ク
ト リ ツ リ ー 全
体 を 監 視 す る
に は 、 関 連 す
る マ ウ ン ト に
マ ー ク を 付 け
る 必 要 が あ る
。 以 下 の 組 み
合 わ せ 値 が 定
義 さ れ て い る
。
FAN_CLOSE フ ァ イ ル が
ク ロ ー ズ さ れ
た
(FAN_CLOSE_WRITE|FAN_CLOSE_NOWRITE)。
マ ー ク を 付 け
る フ ァ イ ル シ
ス テ ム オ ブ ジ
ェ ク ト は 、 フ
ァ イ ル デ ィ ス
ク リ プ タ ー dirfd
と pathname で 指 定 さ
れ た パ ス 名 か
ら 決 定 さ れ る
。
* |
pathname が NULL の 場 合 、 dirfd で マ ー ク を 付 け る フ ァ イ ル シ ス テ ム オ ブ ジ ェ ク ト が 定 義 さ れ る 。 | ||
* |
pathname が NULL で 、 dirfd が 特 別 な 値 AT_FDCWD の 場 合 、 カ レ ン ト ワ ー キ ン グ デ ィ レ ク ト リ が マ ー ク さ れ る 。 | ||
* |
pathname が 絶 対 パ ス の 場 合 、 そ の パ ス 名 に よ り マ ー ク を 付 け る フ ァ イ ル シ ス テ ム オ ブ ジ ェ ク ト が 定 義 さ れ 、 dirfd は 無 視 さ れ る 。 | ||
* |
pathname が 相 対 パ ス で 、 dirfd が AT_FDCWD で な い 場 合 、 マ ー ク を 付 け る フ ァ イ ル シ ス テ ム オ ブ ジ ェ ク ト は dirfd が 参 照 す る デ ィ レ ク ト リ に 対 す る 相 対 パ ス pathname を 解 釈 し て 決 定 さ れ る 。 | ||
* |
pathname が 相 対 パ ス で 、 dirfd が AT_FDCWD の 場 合 、 マ ー ク を 付 け る フ ァ イ ル シ ス テ ム オ ブ ジ ェ ク ト は カ レ ン ト ワ ー キ ン グ デ ィ レ ク ト リ に 対 す る 相 対 パ ス pathname を 解 釈 し て 決 定 さ れ る 。 |
返 り 値
成 功 す る と fanotify_mark() は 0 を 返 す 。 エ ラ ー の 場 合 、 −1 を 返 し 、 errno に エ ラ ー の 原 因 を 示 す 値 を 設 定 す る 。
エ ラ ー
EBADF 無 効 な フ ァ イ ル デ ィ ス ク リ プ タ ー が |
fanotify_fd で 渡 さ れ た 。 | ||
EINVAL 無 効 な 値 が |
flags か mask に 指 定 さ れ た か 、 fanotify_fd が fanotify フ ァ イ ル デ ィ ス ク リ プ タ ー で な か っ た 。
EINVAL |
fanotify フ ァ イ ル デ ィ ス ク リ プ タ ー が FAN_CLASS_NOTIF で オ ー プ ン さ れ た が 、 ア ク セ ス 許 可 イ ベ ン ト (FAN_OPEN_PERM か FAN_ACCESS_PERM) の フ ラ グ が マ ス ク に 含 ま れ て い る 。 | ||
ENOENT |
dirfd と pathname で 指 定 さ れ た フ ァ イ ル シ ス テ ム オ ブ ジ ェ ク ト が 存 在 し な い 。 こ の エ ラ ー は マ ー ク さ れ て い な い オ ブ ジ ェ ク ト か ら マ ー ク を 削 除 し よ う と し た 場 合 に も 発 生 す る 。 | ||
ENOMEM |
必 要 な メ モ リ ー を 割 り 当 て で き な か っ た 。
ENOSPC マ ー ク の 数 が |
8192 の 上 限 を 超 過 し 、 fanotify_init(2) で fanotify |
フ ァ イ ル デ ィ ス ク リ プ タ ー が 作 成 さ れ た 際 に FAN_UNLIMITED_MARKS フ ラ グ が 指 定 さ れ て い な か っ た 。
ENOSYS こ の カ ー ネ ル で は |
fanotify_mark() が 実 装 さ れ て い な い 。 fanotify |
API が 利 用 で き る の は 、 カ ー ネ ル で CONFIG_FANOTIFY が 有 効 に な っ て い る 場 合 だ け で あ る 。
ENOTDIR
flags に FAN_MARK_ONLYDIR が 含 ま れ て い る が 、 dirfd と pathname が デ ィ レ ク ト リ を 指 定 し て い な い 。
バ ー ジ ョ ン
fanotify_mark() は Linux カ ー ネ ル の バ ー ジ ョ ン 2.6.36 で 導 入 さ れ 、 バ ー ジ ョ ン 2.6.37 で 有 効 に な っ た 。
準 拠
こ の シ ス テ ム コ ー ル は Linux 独 自 で あ る 。
バ グ
バ ー ジ ョ ン 3.16 よ り 前 の Linux カ ー ネ ル で は 以 下 の バ グ が 存 在 し た 。
* |
flags に FAN_MARK_FLUSH が 指 定 さ れ て い る 場 合 、 た と え そ の オ ブ ジ ェ ク ト が 使 用 さ れ な い 場 合 で あ っ て も 、 dirfd と pathname に は 有 効 な フ ァ イ ル シ ス テ ム オ ブ ジ ェ ク ト を 指 定 し な け れ ば な ら な い 。 | ||
* |
readdir(2) は FAN_ACCESS イ ベ ン ト を 生 成 し な い 。 | ||
* |
fanotify_mark(2) が FAN_MARK_FLUSH 付 き で 呼 び 出 さ れ た 場 合 、 flags の 値 が 無 効 か は チ ェ ッ ク さ れ な い 。 |
関 連 項 目
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。