Linux:如何确定文件是否已被其他进程更新?

时间:2009-07-03 06:02:10

标签: c linux file

我正在观看log4j输出的XML文件。我有一个自定义查看器,在GUI中显示日志输出。我需要观察这个文件何时更新,以便GUI可以重新解析和更新自己。在C#中有一个FileWatcher概念,所以在Windows上没有probs,但我在Linux上使用C有什么选择。

在unix和linux版本(可能是POSIX)上有没有一种标准的方法呢?

由于

3 个答案:

答案 0 :(得分:6)

您是否在寻找inotify之类的内容?

或者,您可以使用stat轮询文件。

答案 1 :(得分:6)

John提到了在Unix / Linux系统下观看文件可以采取的两条主要路线:通知和民意调查。

通知是指系统本身(通常是内核)在访问或写入文件时向注册的应用程序发出消息的时间。这种方法需要一个兼容的系统,可能在旧机器上不可用。

Linux下通知的主要实现是inotify,它内置于2.6.13及更高版本的内核中,可以修补到2.6.12及更早版本。有一个nice IBM guide使用inotify以及一个基本set of tools and C library来访问inotify。

轮询是指您的程序每隔一段时间重复检查一次文件,以查看该文件的任何内容 - 其大小,上次修改时间,所有者等 - 是否已更改。

没有标准的实现,因为它是在程序级而不是系统级的基础上编写的,尽管系统调用poll存在并且似乎为此目的做了一些有用的事情(手册页说它是类似于select,它等待事件在文件描述符上可用)。您还可以使用stat采用更基本的方法,并自行进行检查。

答案 2 :(得分:0)

如果你想要比inotify更便携的东西,这是一个Linux主义,请查看File Alteration Monitor,这是更老,更便携的技术,但性能较差。另一方面,它对NFS安装的文件系统有用,这取决于你的应用程序可能很重要。