inotify не запускает уведомления о модификации файла

Я подправил пример Вот чтобы сделать это несколько раз, просмотрите файл для «модификаций». Мой код Вот. В моих тестах уведомление inotify срабатывает только при первом изменении файла (т.е. touch«Под ред). Любые последующие изменения в файле не вызывают никаких уведомлений. stat показывает, что время «Изменить» изменилось. Кроме того, изменив код для удаления часов и повторного добавления при каждом срабатывании уведомления (т.е. переместить inotify_add_watch а также inotify_rm_watch быть внутри while(1) петля в моем образец) не помогло решить эту проблему.

Мне было интересно, может ли кто-нибудь здесь помочь с тем, что я могу делать неправильно. Кроме того, хотя я добавил часы для IN_ALL_EVENTSЯ действительно забочусь только о IN_MODIFY События. Не уверен, что это имеет какое-то значение.

Кроме того, этот вариант использования не работает? Должен ли я изменить свой подход вместо просмотра каталога? Пожалуйста посоветуй.

ТИА.

Изменить 1: Как отмечено themel, обработка i нужна некоторая фиксация. Однако даже фиксированная версия не запускает уведомления о последующих событиях файловой системы. Кроме того, добавление отслеживания в каталог, в отличие от файла, демонстрирует аналогичное недетерминированное поведение.

Редактировать 2: я хотел бы получить это пример asio + inotify основанный на этот ответ работать. К сожалению, этот пример не работает для меня вообще. Любая помощь приветствуется. ТИА.

6

Решение

После исправления themel ваш код работает нормально при просмотре каталога, в моих тестах. При просмотре файла, event->len ноль, и ваш код игнорирует уведомления.

С тестом для event->len удалены и все event->name заменен на file_path в операторах printf он прекрасно работает и при просмотре файла.

PS: только заметил, что вы упомянули touch,

touch отправляет следующие события:

IN_OPEN
IN_ATTRIB
IN_CLOSE_WRITE

нет IN_MODIFY

Кроме того, не проверяйте модификацию, редактируя ее vim как я только что сделал — он удаляет файл, перетасовывая рабочую копию и файл подкачки, который удаляет часы. pico работает.

5

Другие решения

Ваше обращение с i сломан, вы никогда не сбросите его на 0 в цикле. Это приводит к тому, что любые последующие события inotify будут рассматриваться только в том случае, если они длиннее самого длинного события перед ними, что маловероятно, что вы хотите.

Фиксированная версия.

3

при мониторинге отдельного файла событие-> len будет 0, поскольку имя файла не возвращается. Я заметил, что многие примеры программ имеют эту проблему.

0
По вопросам рекламы [email protected]