inotifyがイベントの報告を停止します。

inotifyがイベントの報告を停止します。

私はそれを私が書いているinotifyプログラムで使用しています。デフォルトでは、ステップは次のとおりです。Cman 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プログラムにエラーが発生せず、イベント報告が停止する原因は何ですか?

ベストアンサー1

おすすめ記事