2011-08-04 95 views
4

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

如果解决方案是POSIX兼容的,它甚至更好。

回答

7

Inotify早在2005年就被合并到了Linux内核中,所以除非您在老系统中使用,否则您应该可以直接使用它。

我不认为存在这种与POSIX兼容的解决方案。 Mac OS X有FSEvents

同时检查man page使用inotify的。

编辑:

不知道你的约束和/或要求,但也有GFileMonitor如果你使用油嘴(C++的结合是glibmm)和QFileSystemWatcher是你使用Qt。这些可能更加跨平台友好。

+1

下面是使用'inotify'等待文件出现,它是否有助于一个小例子 - http://lazarenko.me/tips-and-tricks/waiting-for-the-file-to-appear- in-linux-using-inotify 它可以很容易地被调整来监视文件的变化。 – 2011-08-04 18:40:42

+0

thanx为解决方案家伙 – vinodkone

0

1)

编写创建一个叫做/ dev/special_file文件中的设备驱动程序。

符号链接的纯文本文件到/ dev /特殊文件

拦截的低级别读/写操作修改真实文本文件,名为/path/to/text.txt,然后生成通过回调信号或某种类型的进程间通信到你想要的任何进程。

2)

有一个过程打开你的文本文件,只是坐着等。使用select()来检测文件何时被修改,然后执行回调例程。

相关问题