我目前正在监视log4j输出的XML文件。我有一个自定义的查看器,可以在GUI中显示日志输出。我需要监视此文件,以便在更新时GUI可以重新解析和更新自身。在Windows中,C#有FileWatcher概念,所以没有问题,但是在Linux上使用C有哪些选择呢?
是否有一种标准方法可用于unix和linux版本(可能是POSIX)?
谢谢。
是否有一种标准方法可用于unix和linux版本(可能是POSIX)?
谢谢。
约翰提到了在Unix/Linux系统下观看文件的两种主要方法:通知和轮询。
通知是指系统本身(通常是内核)在文件被访问或写入时向注册应用程序触发消息。这种方法需要一个兼容的系统,可能在较旧的机器上不可用。
Linux下通知的主要实现是inotify,它内置于2.6.13及更高版本的内核中,并可以打补丁到2.6.12及更早的版本中。有一个很好的IBM指南介绍如何使用inotify,以及一个基本的工具和C库集合来访问inotify。
轮询是指您的程序以间隔重复检查文件,以查看该文件的任何内容 - 其大小、最后修改时间、所有者等是否已更改。
由于它是在程序级别而不是系统级别编写的,因此没有标准实现,尽管存在系统调用poll,并且似乎对此有用(手册页面称其类似于select,它等待文件描述符上的事件变得可用)。您还可以采用更基本的方法stat,自行进行检查。
如果你想要比inotify更加便携的东西,那么可以考虑使用文件变更监视器,它是一种更古老、更便携的技术,但可能性能较差。另一方面,它可以在NFS挂载的文件系统上执行有用的操作,这对于你的应用程序可能很重要。