2013-08-22 5 views
0

전체 시스템을 모니터링하고 싶습니다. FAN_OPEN_PERM | 다중 스레드 프로그램에 의한 FAN_CLOSE_WRITE 이벤트 및 일부 디렉토리를 무시합니다 (예 :/home/mydir). main()에서 fanotify_init() 및 fanotify_mark()를 다음과 같이 사용했습니다.fanotify는 다중 스레드 프로그램에서 FAN_OPEN_PERM 이벤트에 대한 전체 시스템을 모니터 할 수없고 디렉토리를 무시할 수 없습니다.

// FAN_GLOBAL_LISTENER를 사용할 방법이 있습니까?

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

// 표시 "/"(멀티 스레드 프로그램으로 작동하지 않습니다) 또는 "/ "(/" ....

// 이제, 디렉토리에게

을 무시하는 집 | FAN_CLOSE_WRITE | FAN_EVENT_ON_CHILD, AT_FDCWD이 | FAN_MARK_MOUNT, FAN_OPEN_PERM FD, FAN_MARK_ADD)

fanotify_mark를 (잘 작동) "

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- 일반)

답변

0

the man page을 읽으십시오.

FAN_OPEN_PERM 플래그는 파일을 여는 데 권한이 필요한 경우 이벤트를 시작합니다. 파일을 여는 경우,/tmp에 말하면 아무 것도하지 않습니다.

대신 FAN_OPEN을 사용해야합니다.

+0

'FAN_OPEN_PERM'을 사용하면 파일을 열 수있는 권한을 '허용'또는 '거부'할 수 있습니다. 'FAN_OPEN'을 사용하면 특정 파일이 열려 있는지 여부 만 볼 수 있습니다 (액세스를 멈출 수는 없습니다). –