如何监控Linux文件系统事件:inotify使用指南(1)
2010-11-04 14:11
986 查看
如何监控Linux文件系统事件:inotify使用指南(1)
http://os.51cto.com 2010-11-04 10:16 Ian Shields IBMDW 我要评论(0)摘要:当需要对Linux文件系统进行高效率、细粒度、异步地监控时,可以采用 inotify。可利用它对用户空间进行安全、性能、以及其他方面的监控。inotify允许监控程序打开一个独立文件描述符,并针对事件集监控一个或者多个文件,例如打开、关闭、移动/重命名、删除、创建或者改变属性。
标签:inotify 监控 Linux文件系统
[align=right]限时报名参加“甲骨文全球大会・2010・北京”及“JavaOne和甲骨文开发者大会2010”[/align]
从文件管理器到安全工具,文件系统监控对于的许多程序来说都是必不可少的。从 Linux 2.6.13 内核开始,Linux 就推出了 inotify,允许监控程序打开一个独立文件描述符,并针对事件集监控一个或者多个文件,例如打开、关闭、移动/重命名、删除、创建或者改变属性。在后期的内核中有了很多增强,因此在依赖这些特性之前,请先检查您的内核版本。
在本文中,您将会学习如何在简单的监控应用程序中使用 inotify 功能。下载样例代码,在您的系统上编译,进一步探索。
历史简介
在 inotify 之前有 dnotify。不幸的是,dnotify 有局限性,用户需要更好的产品。和 dnotify 相比 inotify 的优势如下:Inotify 使用一个独立的文件描述符,而 dnotify 需要为每个受监控的目录打开一个文件描述符。当您同时监控多个目录时成本会非常高,而且还会遇到每进程文件描述符限制。
Inotify 所使用的文件描述符可以通过系统调用获得,并且没有相关设备或者文件。而使用 dnotify,文件描述符就固定了目录,妨碍备用设备卸载,这是可移动媒体的一个典型问题。对于 inotify,卸载的文件系统上的监视文件或目录会产生一个事件,而且监视也会自动移除。
Inotify 能够监视文件或者目录。Dnotify 则只监视目录,因此程序员还必须保持 stat 结构或者一个等效的数据结构,来反映该被监视目录中的文件,然后在一个事件发生时,将其与当前状态进行对比,以此了解当前目录中的条目发生了什么情况。
如上所述,inotify 使用文件描述符,允许程序员使用标准 select 或者 poll 函数来监视事件。这允许高效的多路复用 I/O 或者与 Glib 的 mainloop 的集成。相比之下,dnotify 使用信号,这使得程序员觉得比较困难或者不够流畅。在 2.6.25 内核中 inotify 还添加了 Signal-drive I.O 通知功能。
用于 inotify 的 API
Inotify 提供一个简单的 API,使用最小的文件描述符,并且允许细粒度监控。与 inotify 的通信是通过系统调用实现。可用的函数如下所示:inotify_init
是用于创建一个 inotify 实例的系统调用,并返回一个指向该实例的文件描述符。
inotify_init1
与 inotify_init 相似,并带有附加标志。如果这些附加标志没有指定,将采用与 inotify_init 相同的值。
inotify_add_watch
增加对文件或者目录的监控,并指定需要监控哪些事件。标志用于控制是否将事件添加到已有的监控中,是否只有路径代表一个目录才进行监控,是否要追踪符号链接,是否进行一次性监控,当首次事件出现后就停止监控。
inotify_rm_watch
从监控列表中移出监控项目。
read
读取包含一个或者多个事件信息的缓存。
close
关闭文件描述符,并且移除所有在该描述符上的所有监控。当关于某实例的所有文件描述符都关闭时,资源和下层对象都将释放,以供内核再次使用。
因此,典型的监控程序需要进行如下操作:
使用 inotify_init 打开一个文件描述符
添加一个或者多个监控
等待事件
处理事件,然后返回并等待更多事件
当监控不再活动时,或者接到某个信号之后,关闭文件描述符,清空,然后退出。
在下一部分中,您将看到可以监控的事件,它们如何在简单的程序中运行。最后,您将看到事件监控如何进行。
相关文章推荐
- 使用 inotify 监控 Linux 文件系统事件
- 使用Inotify 监控Linux 文件系统事件
- 使用 inotify 监控 Linux 文件系统事件
- 使用 inotify 监控 Linux 文件系统事件
- 使用 inotify 监控 Linux 文件系统事件
- 用 inotify 监控 Linux 文件系统事件
- inotify之文件系统事件监控使用入门
- inotify之文件系统事件监控使用入门
- 用 inotify 监控 Linux 文件系统事件
- linux 高效的文件系统事件监控 内核级解析方案 inotify
- 用 inotify 监控 Linux 文件系统事件
- linux 高效的文件系统事件监控 内核级解析方案 inotify
- Linux下使用inotify实现对文件的监控
- inotify 文件系统事件监视 rsync结合使用
- 如何使用nmon监控Linux系统性能
- linux使用Inotify监控目录或者文件状态变更
- 如何使用_SSHFS_通过_SSH_挂载远程的_Linux_文件系统或者目录
- 使用inotify-tools监控Linux下网站文件变动情况
- 深入理解计算机系统 头文件 csapp.h 如何在linux里使用
- Linux下使用inotify监控文件动作