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

我目前正在观看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采用更基本的方法并自行进行检查.

相关文章

linux常用进程通信方式包括管道(pipe)、有名管道(FIFO)、...
Linux性能观测工具按类别可分为系统级别和进程级别,系统级别...
本文详细介绍了curl命令基础和高级用法,包括跳过https的证书...
本文包含作者工作中常用到的一些命令,用于诊断网络、磁盘占满...
linux的平均负载表示运行态和就绪态及不可中断状态(正在io)的...
CPU上下文频繁切换会导致系统性能下降,切换分为进程切换、线...