是否存在知道文件已更改的异步方式?

时间:2011-08-04 17:43:56

标签: c++ file unix filesystems posix

我想异步监视文件是否有任何更改。这是我希望在修改/删除文件时在我的程序中回调(可能来自内核)。该文件只是一个纯文本文件。我知道可以使用轮询机制来做到这一点,但我正在寻找一个基于事件的解决方案。我读到了关于inotify,但看起来它需要修补我的内核。

如果解决方案符合POSIX标准,那就更好了。

3 个答案:

答案 0 :(得分:7)

早在2005年,

Inotify就被合并到了Linux内核中,所以除非你在一个非常的旧系统中,否则你应该可以直接使用它。 / p>

我认为不存在符合POSIX标准的解决方案。 Mac OS X有FSEvents

同时检查man page是否有inotify。

编辑:

不了解您的约束和/或要求,但如果您使用Glib(C ++绑定为GFileMonitor),则还有glibmm,而QFileSystemWatcher则使用Qt。这些可能更适合跨平台友好。

答案 1 :(得分:1)

SGI的fam已移植到多个Unix。还有gamin

答案 2 :(得分:0)

1)

编写一个设备驱动程序,创建一个名为/ dev / special_file的文件。

将纯文本文件符号链接到/ dev / special file

拦截低级读/写操作以修改实际文本文件,称为/path/to/text.txt,然后通过信号或某种类型的进程间comm生成回调,以执行您想要的任何进程。

2)

让进程打开您的文本文件,然后坐下来等待。使用select()来检测该文件何时被修改,然后执行回调例程。