我目前正在观看log4j输出的XML文件.我有一个自定义查看器,在GUI中显示日志输出.我需要观察这个文件何时更新,以便GUI可以重新解析和更新自己.在C#中有一个FileWatcher概念,所以在Windows上没有probs,但我在Linux上使用C有什么选择.
有没有一种标准的方法在unix和linux版本(POSIX可能)上执行此操作?
谢谢
最佳答案
John提到了在Unix / Linux系统下观看文件可以采取的两条主要途径:通知和轮询.
通知是指系统本身(通常是内核)在访问或写入文件时向注册的应用程序发出消息的时间.此方法需要兼容的系统,可能在旧机器上不可用.
Linux下通知的主要实现是inotify,它内置于2.6.13及更高版本的内核中,可以修补到2.6.12及更早版本.有一个使用inotify的nice IBM guide以及一个用于访问inotify的基本set of tools and C library.
轮询是指您的程序每隔一段时间反复检查一个文件,以查看该文件的任何内容 – 其大小,上次修改时间,所有者等 – 是否已更改.
没有标准的实现,因为它是在程序级而不是系统级的基础上编写的,尽管系统调用poll存在并且似乎为此目的做了一些有用的事情(手册页说它类似于select,它等待使事件在文件描述符上可用).您也可以使用stat采用更基本的方法并自行进行检查.