使用C++的macOS的文件更改通知

yc0p9oo0  于 2022-12-30  发布在  Mac
关注(0)|答案(1)|浏览(171)

我正在编写macOS启动守护程序(用C++编写),我需要知道本地磁盘上的某个文件何时被更改。操作系统是否提供此类通知?
我试图避免在循环中每N秒轮询一次那个文件的更改。

iklwldmw

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标志对您的情况很有用。

相关问题