c - Linux:如何确定文件是否已被另一个进程更新?

标签 c linux file

我目前正在观察来自 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/

相关文章:

c - 阻塞的系统调用不会让 SIGKILL 终止进程

java - 如何在我的应用程序中存储图像而无需提供图像的确切目录?

c - 我如何监控 cookie 是否被发送到其来源域以外的域?

linux - 如何在 linux 上的 wordpress 中安装主题?

linux - Bash 监控目录并将文件移出到新位置

php - 覆盖 upload_max_filesize

file - 通过 watch_file 观察到文件更改时如何获取文件名

c - 如果从文件输入中获取,为什么不\n 生成一个新行字符?

c - 在C中找到中间数

c - 在柯南构建步骤中选择构建类型