Я хочу, чтобы мой код был уведомлен, когда какой-либо файл (прямо или косвенно) изменен в заданном каталоге. Под "измененным" я имею в виду, что я хочу, чтобы мой код был уведомлен при изменении содержимого файла, его переименовании или удалении; или если добавлен новый файл. Для моего приложения могут быть тысячи файлов.
Я смотрел как FSEvents, но его Обзор технологий говорит, в частности:
Важным моментом для удаления является то, что степень детализации уведомлений находится на уровне каталога. Это говорит вам только о том, что что-то в каталоге изменилось, но не сообщает вам, что изменилось.
В нем также говорится:
API событий файловой системы также не предназначен для определения того, когда изменяется конкретный файл. Для этих целей механизм kqueues более уместен.
Однако, чтобы использовать kqueue в данном файле, нужно открыть файл, чтобы получить файловый дескриптор. Нецелесообразно управлять тысячами дескрипторов файлов (и, возможно, превысит максимально допустимое количество дескрипторов открытых файлов).
Любопытно, что в Windows я могу использовать функцию ReadDirectoryChangesW()
, и она делает именно то, что я хочу.
Итак, как можно делать то, что я хочу в Mac OS X? Или, задал другой вопрос: как можно написать эквивалент ReadDirectoryChangesW()
для Mac OS X в пользовательском пространстве (и сделать это очень эффективно)?