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