私はそれを私が書いている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
)は発生しません。
これはしばらくうまく機能します(通常1日または2日間実行されます)。それから明らかな理由なくinotify
事件報告を中止しました。私のプログラムの残りの部分は問題なく実行され続けますが、もはやイベントを受け取らず、関連するすべてのinotify.
エラー条件をチェックしていると信じているので、デバッグ方法がわかりません。監視されたファイルはまだ存在し、inotify
監視するように設定されたときと同じinodeを持ちます。
inotify
プログラムにエラーが発生せず、イベント報告が停止する原因は何ですか?