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

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

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

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

Это также говорит:

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

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

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

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

Ответы на вопрос(4)

Ваш ответ на вопрос