国战袁绍登场!《攻城掠地》手游版新
0 2023-10-07 16:45:38
Inotify 是 Linux 核心子系统之一,允许监控程序打开一个独立文件描述符,并针对事件集监控一个或者多个文件,例如打开、关闭、移动/重命名、删除、创建或者改变属性。
Inotify 能够监控文件系统操作,比如读取、写入和创建。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。学习如何将 inotify 集成到您的应用程序中,并发现一组可用来进一步自动化系统治理的命令行工具。
相较于被 inotify 取代较旧的 dnotify 模组,inotify 有诸多益处。在旧的模组中,程式必须为每一个被监控的目录建立 file descriptor,这种作法很容易让行程拥有的 file descriptor 逼近系统允许的上限,进而形成瓶颈。dnotify 产生的 file decriptor 也会导致系统资源忙碌,使可移除装置无法被移除,徒增使用上的困扰。
由于 dnotify 只能让程式设计师监控目录层级的变化,「精细度」亦是“dnotify”的劣势之一。为此,程式设计师必须付出额外的心力,自行撰写程式码以期追踪更细微的档案系统事件。
inotify 相较之下使用较少的 file descriptor,亦允许 select()与 poll()介面,优于 dnotify 使用的信号系统。这也使得 inotify 与既有以 select()或 poll()为基础之函式库(如:Glib )整合更加便利。
inotify 的原始开发者为 John McCutchan、罗伯特·拉姆与 Amy Griffis。于 Linux 核心 2.6.13 发行时(2005 年六月十八日),被正式纳入 Linux 核心。尽管如此,它仍可透过修补程式的方式与 2.6.12 甚至更早期的 Linux 核心整合。
inotify 的主要应用于桌面搜索软体,像:Beagle,得以针对有变动的档案重新索引,而不必没有效率地每隔几分钟就要扫描整个档案系统。相较于主动轮询档案系统,透过作业系统主动告知档案异动的方式,让 Beagle 等软体甚至可以在档案更动后一秒内更新索引。
此外,诸如:更新目录检视、重新载入设定档、追踪变更、备份、同步甚至上传等许多自动化作业流程,都可因而受惠。
在 inotify 之前有 dnotify。不幸的是,dnotify 有局限性,用户需要更好的产品。和 dnotify 相比 inotify 的优势如下:
应用到性能监控、程序调试、以及自动化等领域时,inotify 是监控 Linux 文件系统的功能强大的、高粒度的机制。利用本文提供的样例代码,您可以开始编写用来实时记录文件系统事件并最小化性能开销的应用程序。