How to be notified of file/directory change in C/C++, ideally using POSIX主题说明了一切——通常简单且跨平台的方式是智能地进行投票。但是每个操作系统都有一些无需轮询的方式来通知。是否有可能以合理的跨平台方式进行? (我只关心 Windows 和 Linux,但我使用的是 mac,所以我认为 posix 可能会有所帮助?) Linux 用户可以使用 inotify
Windows 爱好者的一些好东西:
Qt 库有一个 QFileSystemWatcher 类,它在文件更改时提供跨平台通知。即使您不使用 Qt,因为源代码可用,您也可以将其作为您自己实现的示例来查看。 Qt 对 Windows、Linux 和 Mac 有单独的实现。 Leopard 有文件系统事件 API。 我之前实际上已经构建了这个系统,用于商业 C 代码库——只要你不需要在阳光下所有奇怪的东西,Windows 和 POSIX 系统有很多重叠之处,你可以抽象出来。 POSIX:使用 inotify——它是为这项工作而构建的完整系统 您可以在"通知线程"中检测到的转发事件的常见内容是: inotify 尤其为您提供了疯狂的细粒度控制,Windows 则更少。使用 inotify,如果您真的想要,您可以几乎实时地监控文件系统正在执行的所有操作。我知道在没有轮询的情况下,#3 都是可能的,但请注意,让它在任一系统上正常工作都非常棘手。 我不认为 POSIX 本身有这方面的功能。我见过的最接近跨平台的是 FAM,它似乎适用于 Linux、BSD 和 Irix,但将它移植到 Windows 和 MacOS 并不是那么容易。 libevent 或 libev 似乎是你想要的,虽然我没有使用它们。 我相信 OS X 现在有适当的钩子/回调,因为 Spotlight 索引需要它们。 在 linux 上,您会遇到额外的麻烦,即通常使用多个文件系统。如果您只需要有限数量的文件/目录的功能,我会尝试定期主动寻找修改。 |