检测对打开文件的更改

Ati*_*liz 8 c linux file

假设我有一个打开的文件.如何在后台检测文件何时被另一个程序更改.如果某个文本编辑器被另一个进程更改,则它可以检测并更新该文件.

我特意在Linux下使用C(这似乎取决于操作系统).

Dou*_*oug 11

如果您不想使用stat,并且不介意特定于Linux,则可以使用inotify API.你的内核需要是2.6.13或更高版本以及glibc 2.4或更新版本(如果你的目标是过去2或3年内的任何内容,它们将会是你的内核).该API基本上是给你一个文件描述符,你可以pollselect,并read获取有关修改的文件的信息.如果你的应用是互动的,就像一个编辑器,那么它通常有某种事件循环调用的selectpoll,并可以观看事件您的inotify文件描述符.

使用inotify通常是首选stat,因为您可以立即收到通知,并且在文件未更改时不会浪费时间和磁盘I/O轮询.缺点是可能无法在NFS或其他网络文件系统上运行,并且它不可移植.

IBM Developerworks的这个页面给出了一些示例C代码,手册页是权威参考.


Aif*_*Aif 5

使用stat功能.页面中的示例.