나는 그것을 내가 작성하고 있는 inotify
프로그램에서 사용하고 있습니다 . 기본적으로 단계는 다음과 같습니다.C
man 7 inotify
/* setup */
int fd = inotify_init1(IN_NONBLOCK);
int wd = inotify_add_watch(fd, path, IN_CLOSE_WRITE);
struct pollfd fds[1];
fds[0].fd = fd;
fds[0].events = POLLIN;
/* within main loop */
int poll_num = poll(fds, 1, 0);
if (poll_num == -1) { /* error handling */ }
else if (poll_num>0) {
if (fds[0].revents & POLLERR ||
fds[0].revents & POLLHUP ||
fds[0].revents & POLLNVAL) { /* error handling */ }
if (fds[0].revents & POLLIN) { /* read events */ }
}
이벤트를 읽을 때 이벤트 마스크에서 대기열 오버플로( IN_Q_OVERFLOW
), 파일 시스템 마운트 해제( IN_UNMOUNT
) 및 기타 문제( IN_IGNORED
)가 있는지 확인합니다. 이러한 상황(및 POLLERR
등 POLLHUP
)은 발생하지 않습니다.
이는 한동안 잘 작동합니다(보통 하루나 이틀 동안 실행됨). 그러다가 뚜렷한 이유 없이 inotify
사건 보고를 중단했습니다. 내 프로그램의 나머지 부분은 문제 없이 계속 실행되지만 더 이상 이벤트를 수신하지 않으며 inotify.
모든 관련 오류 조건을 확인하고 있다고 믿기 때문에 디버깅 방법을 잘 모르겠습니다. 감시된 파일은 여전히 존재하며 inotify
감시하도록 설정된 때와 동일한 inode를 갖습니다.
inotify
프로그램에 오류가 발생하지 않고 이벤트 보고가 중지되는 원인은 무엇입니까 ?