假设我有一个打开的文件。如何检测另一个程序在后台更改文件时发出通知。一些文本编辑器可以检测并更新打开文件,如果它被其他进程更改。
我特别是在Linux下使用C语言进行此操作(这似乎与操作系统有关)。
如果您不想使用stat
来轮询文件,并且不介意仅限于Linux,那么可以使用inotify API。您的内核需要是2.6.13或更新版本,glibc 2.4或更新版本(如果您的目标是过去2或3年中的任何内容,则它们会是最新版本)。该API基本上为您提供了一个文件描述符,您可以使用poll
或select
,并read
以获取有关已修改文件的信息。如果您的应用程序是交互式的,比如编辑器,那么通常会有某种事件循环调用select
或poll
,并且可以监视您的inotify文件描述符以进行事件。
使用inotify通常优先于stat
,因为您可以立即获得通知,而不必在文件未更改时浪费时间和磁盘I/O轮询。缺点是可能无法在NFS或其他网络文件系统上工作,并且不可移植。
IBM Developerworks的此页面提供了一些示例C代码,man页面是权威参考。
我看到的Windows和Linux上的文本编辑器都是以相同的方式完成这个操作:它们不会检查文件是否实际发生了更改,只是查看文件的stat mtime。