Предположим, что программа на C отражает изменения в отслеживаемом каталоге в зеркальном каталоге. Вы рекурсивно просматриваете все подкаталоги и используете структуру, проиндексированную на watch descriptors
, содержащую pathnames
отслеживаемых каталогов, чтобы иметь возможность восстановить полное имя файла в случае события. Это все, что вам нужно для обработки всех событий, кроме IN_MOVED_FROM
и IN_MOVED_TO
. В случае с этими двумя вам, в дополнение к вышеупомянутому, кажется, также потребуется следующее:
- Структура с индексом
cookies
, позволяющая сохранять и извлекатьwatch descriptor
иfilename
определенного событияIN_MOVED_FROM
после появления соответствующего событияIN_MOVED_TO
. timestamp
-упорядоченная очередь (избыточная), содержащая файлы cookie, которые еще не были объединены в пару, чтобы их можно было интерпретировать какIN_DELETE
события и удалить из обеих структур по истечении произвольного периода времени.- Отношение
pathname/filename
->watch descriptor
(избыточное), которое позволяет вам эффективно определятьwatch descriptor
тайм-аутаcookie
в случае, если (повторно) перемещенный объект файловой системы был каталогом, который вам теперь нужно отменить.
Довольно много накладных расходов на поддержку операций переименования. Действительно ли нет другого способа обнаружить иностранное переименование, кроме ожидания истечения времени ожидания непарного файла cookie? Учитывая тот факт, что существует похоже, это способ различить локальное и иностранное переименование в fsnotify это кажется довольно странным. выбор.