Powiadomienie o zmianie systemu plików na poziomie plików w systemie Mac OS X

Chcę, aby mój kod był powiadamiany, gdy dowolny plik pod (bezpośrednio lub pośrednio) dany katalog jest modyfikowany. Przez „zmodyfikowany” mam na myśli, że chcę, aby mój kod był powiadamiany o każdej zmianie zawartości pliku, zmianie jego nazwy lub usunięciu go; lub jeśli zostanie dodany nowy plik. Dla mojej aplikacji mogą istnieć tysiące plików.

Wyglądałem jak FSEvents, ale jego przegląd technologii mówi po części:

Ważną rzeczą, którą należy zabrać, jest to, że szczegółowość powiadomień jest na poziomie katalogu. Mówi ci tylko, że coś w katalogu się zmieniło, ale nie mówi ci, co się zmieniło.

Mówi także:

Interfejs API zdarzeń systemu plików nie jest również przeznaczony do ustalania, kiedy dany plik się zmienia. Dla takich celów mechanizm kqueues jest bardziej odpowiedni.

Aby jednak użyć kqueue na danym pliku, należy otworzyć plik, aby uzyskać deskryptor pliku. Zarządzanie tysiącami deskryptorów plików jest niepraktyczne (i tak prawdopodobnie przekroczyłoby maksymalną dopuszczalną liczbę otwartych deskryptorów plików).

Co ciekawe, w systemie Windows mogę używaćReadDirectoryChangesW() funkcja i robi dokładnie to, czego chcę.

Jak więc zrobić to, czego chcę w systemie Mac OS X? Albo zapytany w inny sposób: w jaki sposób można napisać odpowiednikReadDirectoryChangesW() dla Mac OS X w przestrzeni użytkownika (i to bardzo wydajnie)?

questionAnswers(4)

yourAnswerToTheQuestion