inotify是Linux核心子系统之一,做为文件系统的附加功能,它可监控文件系统并将异动通知应用程序。本系统的出现取代了旧有Linux核心里,拥有类似功能之dnotify模块。
inotify的原始开发者为John McCutchan、罗伯特·拉姆与Amy Griffis。于Linux核心2.6.13发行时(2005年六月十八日),被正式纳入Linux核心。尽管如此,它仍可透过补丁的方式与2.6.12甚至更早期的Linux核心集成。
inotify的主要应用于桌面搜索软件,像:Beagle,得以针对有变动的文件重新索引,而不必没有效率地每隔几分钟就要扫描整个文件系统。相较于主动轮询文件系统,透过操作系统主动告知文件异动的方式,让Beagle等软件甚至可以在文件更动后一秒内更新索引。
此外,诸如:更新目录查看、重新加载配置文件、追踪变更、备份、同步甚至上传等许多自动化作业流程,都可因而受惠。
相较于被inotify取代较旧的 dnotify模块,inotify有诸多益处。在旧的模块中,程序必须为每一个被监控的目录创建file descriptor,这种作法很容易让行程拥有的file descriptor逼近系统允许的上限,进而形成瓶颈。dnotify产生的file decriptor也会导致系统资源忙碌,使可移除设备无法被移除,徒增使用上的困扰。
由于dnotify只能让程序员监控目录层级的变化,“精细度”亦是“dnotify”的劣势之一。为此,程序员必须付出额外的心力,自行撰写代码以期追踪更细微的文件系统事件。
inotify相较之下使用较少的file descriptor,亦允许select()与poll()接口,优于dnotify使用的信号系统。这也使得inotify与既有以select()或poll()为基础之库(如:Glib)集成更加便利。
inotify拥有专为其设计的系统函数。十分容易上手。
#include <sys/inotify.h>