我目前正在从log4j输出看一个XML文件。 我有一个自定义查看器,在GUI中显示日志输出。 我需要观察这个文件,以便它何时得到更新,以便GUI可以重新parsing和更新自己。 在C#中有一个FileWatcher的概念,所以在Windows上没有probs,但我有什么select在Linux上使用C.
有没有一个标准的方式做这两个unix和Linux的味道(POSIX也许)?
谢谢
John提到了在Unix / Linux系统下观看文件的两个主要途径:通知和轮询。
通知是系统本身(通常是内核)在访问或写入文件时触发注册应用程序的消息。 这种方法需要一个兼容的系统,可能不适用于旧的机器。
Linux下通知的主要实现是inotify ,它被内置在2.6.13及更高版本的内核中,可以修补到2.6.12及更早的版本。 有一个很好的关于使用inotify的IBM指南 ,以及用于访问inotify的一组基本工具和C库 。
轮询是指程序每隔一段时间重复检查一次文件,以查看是否有关于该文件的任何内容 – 其大小,上次修改时间,所有者等 – 是否已更改。
没有标准的实现,因为它是在程序级而不是系统级写的,虽然系统调用轮询存在,似乎做了一些有用的东西(手册页说,它类似于选择 ,它等待一个事件在文件描述符上变为可用)。 你也可以采取更基本的方法与统计 ,做你自己的检查。
你在找类似inotify的东西吗?
或者你可以用stat来轮询文件。
如果你想要比inotify更为便携的东西,那就是Linux-ism,看看文件变更监视器 ,这是一种更旧的和更便携的技术,但性能可能不那么好。 另一方面,它对NFS挂载的文件系统有用,这取决于你的应用程序可能是重要的。