24-监视文件事件
8.7 监视文件事件
Linux提供了一个监视文件的接口inotify——通过该接口可以监控文件的移动、读取、写入或删除操作。假设你正在编写一个类似GNOME’s Nautilus的图形化文件管理器。如果文件已拷贝至目录,而且Nautilus正在显示目录内容,则该目录在文件管理器中的视图将会出现不一致。
一个解决办法是连续反复读取目录内容,删除变更内容并更新显示结果。这会产生阶段性的开销,远远谈不上是个优雅的解决方案。更糟的是,文件被删除或添加到目录,以及文件管理器反复读取目录这三者间会产生竞争。
通过inotify,内核能在事件发生时把事件推送给应用程序。一旦文件被删除,内核立刻通知Nautilus。Nautilus会做出响应,直接从目录的图形化显示中删除被删除的文件。
许多其他的应用也关注文件事件,比如备份工具和数据索引工具。inotify能够保证这些程序的实时操作:在创建、删除或写入文件时,可以立刻更新备份或数据索引。
inotify取代了dnotify。dnotify是一个较早的文件监视机制,它基于较繁琐的信号接口。和dnotify相比,应用程序总是应该优先考虑使用inotify。inotify机制在内核2.6.13中引入,由于程序在操作普通文件时也使用inotify,因此该机制非常灵活且易于使用。在本书中,我们将只探讨inotify。