Есть ли асинхронный способ узнать, что файл изменился? - PullRequest
4 голосов
/ 04 августа 2011

Я бы хотел асинхронно отслеживать файл на наличие изменений.То есть я хотел бы, чтобы в моей программе был обратный вызов (возможно, из ядра), когда файл был изменен / удален.Файл представляет собой простой текстовый файл.Я знаю, что это можно сделать с помощью механизма опроса, но я ищу решение на основе событий.Я читал об inotify, но похоже, что это требует исправления моего ядра.

Если решение совместимо с POSIX, оно еще лучше.

Ответы [ 3 ]

7 голосов
/ 04 августа 2011

Inotify был объединен с ядром Linux еще в 2005 году, поэтому, если вы не используете очень старую систему, вы сможете использовать ее «из коробки».

Не думаю, что для этого существует POSIX-совместимое решение. Mac OS X имеет FSEvents .

Также проверьте справочную страницу на предмет inotify.

EDIT:

Не знаю о ваших ограничениях и / или требованиях, но есть также GFileMonitor , если вы используете Glib (привязка C ++ glibmm ) и QFileSystemWatcher вы используете Qt. Возможно, они более кроссплатформенные.

1 голос
/ 04 августа 2011

SGI's fam был портирован на несколько Unix. Там также гамин .

0 голосов
/ 04 августа 2011

1)

написать драйвер устройства, который создает файл с именем /dev/special_file.

символическую ссылку вашего простого текстового файла в / dev / special file

, перехватитьнизкоуровневые операции чтения / записи для изменения реального текстового файла, называемого /path/to/text.txt, а затем генерирования обратного вызова через сигналы или некоторый тип межпроцессного взаимодействия с любым процессом, который вы хотите.

2)

попросите процесс открыть ваш текстовый файл и просто сидеть и ждать.используйте select (), чтобы определить, когда этот файл был изменен, затем выполните процедуру обратного вызова.

...