虽然正如Sam在评论中所建议的那样,使用kqueue监视文件更改可能会取得一些成功,但我建议使用其他方法。 尝试使用FSEvents API。它比老式的kqueue更方便,可以很容易地集成到c++ code中。它也来自CoreServices框架,所以它在macOS上是could be safely used in daemons(通过“Daemon-Safe Frameworks”搜索) 其中最重要的部分是对感兴趣的事件执行subscribe操作,拥有一个单独的事件循环,并在工作完成后正确地释放所有这些内容。 从第一眼看起来,您似乎可以使用kFSEventStreamEventFlagItemModified标志。 在这两种方法中,您都需要自己澄清哪种类型的“文件已更改”定义是您感兴趣的,并相应地调整事件标志。 顺便说一句,macOS上没有NOTE_CLOSE_WRITE,但是有一些other标志对您的情况很有用。
1条答案
按热度按时间iklwldmw1#
虽然正如Sam在评论中所建议的那样,使用kqueue监视文件更改可能会取得一些成功,但我建议使用其他方法。
尝试使用FSEvents API。它比老式的kqueue更方便,可以很容易地集成到c++ code中。它也来自CoreServices框架,所以它在macOS上是could be safely used in daemons(通过“Daemon-Safe Frameworks”搜索)
其中最重要的部分是对感兴趣的事件执行subscribe操作,拥有一个单独的事件循环,并在工作完成后正确地释放所有这些内容。
从第一眼看起来,您似乎可以使用kFSEventStreamEventFlagItemModified标志。
在这两种方法中,您都需要自己澄清哪种类型的“文件已更改”定义是您感兴趣的,并相应地调整事件标志。
顺便说一句,macOS上没有NOTE_CLOSE_WRITE,但是有一些other标志对您的情况很有用。