如何在C / C ++中通知文件/目录更改,最好使用POSIX

时间:2020-03-05 18:52:57  来源:igfitidea点击:

主题说,通常所有跨平台方式都是聪明地轮询。但是每个操作系统都有一些无需轮询即可进行通知的方法。是否可以通过合理的跨平台方式进行? (我只真正关心Windows和Linux,但我使用的是Mac,所以我认为posix可能会有所帮助?)

解决方案

回答

我认为POSIX本身不具备此功能。我所见过的最接近跨平台的是FAM,它似乎适用于Linux,BSD和Irix,但是将其移植到Windows和MacOS并不容易。

回答

我认为OS X现在具有适当的挂钩/回调,因为Spotlight索引需要它们。

在linux上,我们将面临另一个麻烦,即通常使用多个文件系统。如果我们只需要有限数量的文件/目录的功能,我将尝试定期寻找修改的机会。

回答

Linux用户可以使用inotify

inotify is a Linux kernel subsystem
  that provides file system event
  notification.

Windows伙伴的一些好东西:

  • MSDN上的文件更改通知
  • "当文件夹更改时"文章
  • 文件系统更改通知

回答

Qt库具有QFileSystemWatcher类,该类在文件更改时提供跨平台通知。即使我们没有使用Qt,由于源可用,我们也可以将其作为自己实现的示例。 Qt针对Windows,Linux和Mac具有单独的实现。

回答

从Leopard开始,有File System Events API。

回答

libevent或者libev似乎是我们想要的,尽管我没有使用过它们。