Notificação de alteração do sistema de arquivos no nível do arquivo no Mac OS X

Eu quero que meu código seja notificado quando qualquer arquivo abaixo (direta ou indiretamente) de um determinado diretório for modificado. Por "modificado", quero dizer que quero que meu código seja notificado sempre que o conteúdo de um arquivo for alterado, renomeado ou excluído; ou se um novo arquivo for adicionado. Para meu aplicativo, pode haver milhares de arquivos.

Eu olhei como FSEvents, mas sua visão geral da tecnologia diz, em parte:

O ponto importante a ser levado é que a granularidade das notificações está no nível de diretório. Diz-lhe apenas que algo no diretório mudou, mas não diz o que mudou.

Também diz:

A API de eventos do sistema de arquivos também não foi projetada para descobrir quando um determinado arquivo é alterado. Para tais fins, o mecanismo Kqueues é mais apropriado.

No entanto, para usar o kqueue em um determinado arquivo, é necessário abrir o arquivo para obter um descritor de arquivo. É impraticável gerenciar milhares de descritores de arquivos (e provavelmente excederia o número máximo permitido de descritores de arquivos abertos).

Curiosamente, no Windows, eu posso usar oReadDirectoryChangesW() função e faz exatamente o que eu quero.

Então, como se pode fazer o que eu quero no Mac OS X? Ou, perguntado de outra maneira: como alguém escreveria o equivalente aReadDirectoryChangesW() para Mac OS X no espaço do usuário (e fazê-lo de forma muito eficiente)?

questionAnswers(4)

yourAnswerToTheQuestion