2014-06-08 1 views
2

우선, inotify를 사용하는 것보다 쉬운 방법이 있다면 알려주십시오!C++ inotify - 여러 디렉토리/서브 디렉토리보기

기본적으로 내가하고 싶은 것은 다음 플래그로 inotify를 사용하여 루트 디렉토리를 보는 것입니다. IN_CREATE | IN_MODIFY | IN_DELETE. IN_CREATE 및 IN_ISDIR 인 경우 해당 폴더도보고 싶습니다. 하지만 필요한 것은 파일이 하위 디렉토리에서도 작성, 삭제 또는 수정되었는지 여부입니다. 이제는 inotify_add_watch()를 사용하여 여러 디렉토리를 추가 할 수 있다는 것을 알았지 만 이벤트 -> 이름을 읽을 때 어떤 디렉토리에 속하는지 어떻게 알 수 있습니까? inotify_event 구조체가 그 값을 보유하고 있지 않은 것처럼 보입니다. 나는이 같은 구조 그래서 만약 그런 다음

/root 

을 나는 디렉토리 "A"를 만들 :

/root/a 

그런 다음 파일을 생성 : 나는 이벤트 -을 읽을 때

/root/a/tmp.txt 

을> 이름 만 tmp.txt라고 말하지만, "a"서브 디렉토리에 있다는 것을 어떻게 알 수 있습니까? 시계 설명자가 무엇인지 어떻게 알 수 있습니까?

답변

0

inotify_event 구조체의 name 필드에는 이벤트가 발생한 객체의 이름 (wd 기준)이 포함됩니다. 상위 디렉토리의 절대 경로를 가져와 전체 경로를 얻으려면 파일/디렉토리의 이름을 연결해야합니다. 또한 Inotify_event 구조체의 마스크 필드에서 IN_ISDIR 마스크 비트를 사용하여 해당 wd에 대해 발생한 이벤트가 파일인지 디렉토리인지 알 수 있습니다.

이 이름 필드는 이벤트가 지켜 디렉토리 내 파일에 대한 반환 될 때에만 존재하는 inotify를 here

에서이다; 감시 대상 디렉토리에 상대적인 파일 경로 이름을 식별합니다. 이 경로명은 널로 끝나며, 후속 읽기를 적절한 주소 경계에 맞추기 위해 널 바이트를 더 포함 할 수 있습니다.

+0

wd 필드는/root/a/watch에 다시 링크됩니다 – rex