检测对打开文件的更改

时间:2009-01-22 11:33:15

标签: c linux file

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

我特别要求在Linux下使用C(这似乎取决于操作系统)。

3 个答案:

答案 0 :(得分:11)

如果您不想使用stat轮询文件,并且不介意特定于Linux,那么您可以使用inotify API。你的内核需要是2.6.13或更高版本以及glibc 2.4或更新版本(如果你的目标是过去2或3年内的任何内容,它们将是你的内核)。 API基本上为您提供了一个文件描述符,您可以pollselectread来获取有关已修改文件的信息。如果您的应用程序是交互式的,如编辑器,那么它通常会有一些调用selectpoll的事件循环,并且可以监视事件的inotify文件描述符。

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

This page at IBM Developerworks提供了一些示例C代码,man page是最终参考。

答案 1 :(得分:5)

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

答案 2 :(得分:3)

我在Windows和Linux上看过的文本编辑器也是这样做的:它们不检查文件是否实际发生了变化,只是查看文件的stat mtime。