Чтение дескриптора inotify заблокировано навсегда

Моя программа использует inotify для мониторинга изменений в файлах. Мой код выглядит следующим образом:

    fd = inotify_init();
    wd = inotify_add_watch(fd, "./test.txt", IN_ALL_EVENTS);
    len = read(fd, buff, BUFF_SIZE);
    while (i < len) {
        struct inotify_event *pevent = (struct inotify_event *) &buff[i];
                //process events
        i += sizeof(struct inotify_event) + pevent->len;
    }

Однако после того, как я получил несколько событий для первого изменения в отслеживаемых файлах (событие IN_OPEN, IN_MODIFY, IN_ACESSи т. д.), последующие изменения в отслеживаемых файлах приводят к возникновению любых других событий ==> моя программа зависает при чтении (чтение заблокировано)

Не могли бы вы, ребята, помочь мне объяснить эту ошибку.

2 ответа

Пожалуйста, покажите, какие операции на самом деле происходят с "./test.txt" и больше о вашем коде (buff, BUFF_SIZE). И вот что вам нужно проверить:

  • Есть некоторые специальные события, такие как IN_IGNORED, которые могут удалить часы из файла
  • Я предлагаю использовать select/poll/epoll для мониторинга fd, а не BLOCKING, прочитанного на нем.

Используйте fcntl, чтобы сделать файловый дескриптор неблокирующим.

Другие вопросы по тегам