GOOGLE ADS

суббота, 7 мая 2022 г.

Уведомление об изменении файловой системы на уровне файлов в Mac OS X

Я хочу, чтобы мой код был уведомлен, когда любой файл (напрямую или косвенно) в данном каталоге изменяется. Под «модифицированным» я имею в виду, что хочу, чтобы мой код уведомлялся всякий раз, когда содержимое файла изменяется, переименовывается или удаляется; или если добавляется новый файл. Для моего приложения могут быть тысячи файлов.

Я смотрел как FSEvents, но в Обзоре технологии частично говорится:


Важно отметить, что детализация уведомлений находится на уровне каталога. Он говорит вам только, что что-то в каталоге изменилось, но не говорит вам, что именно изменилось.


Там также говорится:


API событий файловой системы также не предназначен для обнаружения изменений в конкретном файле. Для таких целей больше подходит механизм kqueues.


Однако, чтобы использовать kqueue для данного файла, нужно открыть файл, чтобы получить дескриптор файла. Нецелесообразно управлять тысячами файловых дескрипторов (и, вероятно, в любом случае будет превышено максимально допустимое количество открытых файловых дескрипторов).

Любопытно, что под Windows я могу использовать эту ReadDirectoryChangesW()функцию, и она делает именно то, что мне нужно.

Итак, как можно делать то, что я хочу, под Mac OS X? Или, если задать другой вопрос: как можно написать эквивалент ReadDirectoryChangesW()для Mac OS X в пользовательском пространстве (и сделать это очень эффективно)?


Решение проблемы

РЕДАКТИРОВАТЬ: не проверено, но Константин указывает ниже, что этот образец кода устарел с 2012 года.

Я не верю, что есть конкретный API для того, что вы ищете. Apple предоставляет пример кода для аналогичной задачи под названием Watcher. Это не то, что вы ищете, но это лучшее, что вы можете сделать на данный момент. Вы должны делать снимки каталога и повторно сканировать его, когда обнаружите, что что-то изменилось. Конечно, лучше всего проверять время модификации, если вы можете доверять времени модификации.

Вероятно, вы правы в том, что попытка зарегистрироваться для неограниченного количества kqueues, скорее всего, будет неработоспособной.

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...