我想异步监视文件是否有任何更改。这是我希望在修改/删除文件时在我的程序中回调(可能来自内核)。该文件只是一个纯文本文件。我知道可以使用轮询机制来做到这一点,但我正在寻找一个基于事件的解决方案。我读到了关于inotify,但看起来它需要修补我的内核。
如果解决方案符合POSIX标准,那就更好了。
答案 0 :(得分:7)
Inotify就被合并到了Linux内核中,所以除非你在一个非常的旧系统中,否则你应该可以直接使用它。 / p>
我认为不存在符合POSIX标准的解决方案。 Mac OS X有FSEvents。
同时检查man page是否有inotify。
编辑:
不了解您的约束和/或要求,但如果您使用Glib(C ++绑定为GFileMonitor),则还有glibmm,而QFileSystemWatcher则使用Qt。这些可能更适合跨平台友好。
答案 1 :(得分:1)
答案 2 :(得分:0)
1)
编写一个设备驱动程序,创建一个名为/ dev / special_file的文件。
将纯文本文件符号链接到/ dev / special file
拦截低级读/写操作以修改实际文本文件,称为/path/to/text.txt,然后通过信号或某种类型的进程间comm生成回调,以执行您想要的任何进程。
2)
让进程打开您的文本文件,然后坐下来等待。使用select()来检测该文件何时被修改,然后执行回调例程。