加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-14 01:45:56 所属栏目:Linux 来源:网络整理
导读:我目前正在观看log4j输出的 XML文件.我有一个自定义查看器,在GUI中显示日志输出.我需要观察这个文件何时更新,以便GUI可以重新解析和更新自己.在C#中有一个FileWatcher概念,所以在 Windows上没有probs,但我在 Linux上使用C有什么选择. 有没有一种标准的方法在
我目前正在观看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采用更基本的方法并自行进行检查.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读