디렉토리의 모든 파일에 대해 일부 명령을 호출하고 해당 디렉토리에서 생성 된 모든 파일에서 해당 명령을 호출하도록 감시를 설정한다고 가정합니다. 내가하는 경우 :readdir/inotify를 사용하여이 경쟁 조건을 피하는 방법은 무엇입니까?
while((sdi = readdir(d)) != NULL) { ... } closedir(d); /* Files created here will be missed */ inotify_add_watch(...);
일부 파일이 누락 될 수 있습니다. readdir() 전에 inotify_add_watch()를 호출하면 파일이 두 번 실행될 수 있습니다 (두 번 연기하는 것을 막기 위해 인프라가 필요하며 가장자리 케이스는 처리하기 어려울 것 같습니다). readdir 루프 중에 작업 한 모든 파일의 이름을 기록하지 않아야하고 을 inotify_event 구조체에서 반환 된 이름과 비교하는 간단한 방법이 있습니까? 나는 에 필요한 비교의 양을 최소화 할 수 있습니다 : 아무것도하지 않습니다
while((sdi = readdir(d)) != NULL) { ... } inotify_add_watch(...); while((sdi = readdir(d)) != NULL) { /* record name */ ... } closedir(d);
그리고 일반적으로 두 번째가 readdir() 루프를하지만,이 나쁜 해킹 같은 느낌.