0

FAN_OPEN_PERM | システム全体を監視したい | マルチ スレッド プログラムによる FAN_CLOSE_WRITE イベント、および一部のディレクトリ (/home/mydir など) を無視します。main() で fanotify_init() と fanotify_mark() を次のように使用しました。

//FAN_GLOBAL_LISTENER を使用する方法はありますか?

fd = fanotify_init(FAN_CLOEXEC | FAN_NONBLOCK | FAN_CLASS_CONTENT | FAN_UNLIMITED_QUEUE | FAN_UNLIMITED_MARKS, O_RDONLY | O_LARGEFILE) ...

// "/" (マルチスレッド プログラムとしては機能しません) または "/home" (正常に機能します) をマークします。

fanotify_mark(fd, FAN_MARK_ADD | FAN_MARK_MOUNT, FAN_OPEN_PERM | FAN_CLOSE_WRITE | FAN_EVENT_ON_CHILD, AT_FDCWD, "/") ....

//ここで、ディレクトリを無視します

fanotify_mark(fd, FAN_MARK_ADD | FAN_MARK_ONLYDIR | FAN_MARK_IGNORED_MASK | FAN_MARK_IGNORED_SURV_MODIFY, FAN_OPEN_PERM | FAN_CLOSE_WRITE | FAN_EVENT_ON_CHILD, AT_FDCWD, "/home/mydir")

私のプログラムでは、main() はイベントを読み取り、それを複数のスレッドに渡してさらに処理します。

問題 : 1) このマルチスレッド プログラムでは、"/" を監視するとシステムがハングしますが、"/home" では問題なく動作します。2) それでも「/home/mydir」の通知を受け取ります (「/home」とマークされ、「/home/mydir」は無視されます)。

マルチスレッドプログラムで問題なくシステム全体をマークする方法は?

無視マスクを使用してディレクトリ全体を(再帰的に)無視する方法は? (カーネル 2.6.38-8-generic)

4

1 に答える 1

-1

マニュアルページを読んでください。

FAN_OPEN_PERM フラグは、ファイルを開くために権限が必要な場合にイベントを発生させます。/tmp などでファイルを開いても、何もしません。

代わりに、FAN_OPEN を使用してください。

于 2013-10-22T20:46:01.393 に答える