2014-07-18 1 views
0

바쁜 디렉토리에서 inotify을 사용 중입니다 (파일이 계속 생성됨). 나는 그들 모두를 위해 IN_CLOSE_WRITE 이벤트를 잡으려고합니다.바쁜 디렉토리에서 inotify 사용

그래서 이런 식으로 시도했습니다.

fd = inotify_init(); 
inotify_add_watch(fd, DIR_PATH, IN_CLOSE_WRITE); 
while(1) { 
    len = read(fd, buff, INOTIFY_EVENT_SIZE); 
    if (len < 0) { 
     PRINT_ERROR("Read failed. Keep watching.\n"); 
     continue; 
    } 
    /* Process the event */ 
} 

이 메서드는 처음 읽은 이벤트를 처리하는 동안 생성 된 이벤트를 catch하지 못합니다. 나는 그것이 비록 작동 할 것으로 예상했다.

어떻게 처리해야합니까? 누락 된 부분이있을 경우를 대비하여 알려 주시기 바랍니다.

+1

정확히 어떻게 실패합니까? 어떤 사건이 잡히지 않았습니까? 어떻게 알았어? –

+0

한도가 될 때까지 이벤트가 대기열에 들어갑니다. 이 제한은'/ proc/sys/fs/inotify/max_queued_events'에서 설정 될 수 있습니다. – hek2mgl

+0

@BasileStarynkevitch IN_CLOSE_WRITE에서 기다리고 있었지만 실제로 내 디렉터리의 파일이 diff 위치에서 이동되었습니다. 그래서 사건은 잡히지 않았습니다. 이벤트 이름을 변경했는데 잘 작동했습니다. –

답변

0

IN_CLOSE_WRITE에서 기다리고 있었지만 실제로 내 디렉터리에있는 파일은 diff 위치에서 이동했습니다. 그래서 사건은 잡히지 않았습니다. 이벤트 마스트를 IN_MOVE로 변경했는데 잘 돌아갔습니다.