1. inotify重要功能
它是一个内核用于通知用户空间法度榜样文件体系变更的机制。
众所周知,Linux 桌面体系与 MAC 或 Windows 比拟有很多不如人意的处所,为了改良这种状况,开源社区提出用户态须要内核供给一些机制,以便用户态可以或许及时地点知内核或底层硬件设备产生了什么,大年夜而可以或许更好地治理设备,给用户供给更好的办事,如 hotplug、udev 和 inotify 就是这种需求催生的。Hotplug 是一种内核向用户态应用传递关于热插拔设备一些事宜产生的机制,桌面体系可以或许应用它对设备进行有效的治理,udev 动态地保护 /dev 下的设备文件,inotify 是一种文件体系的变更通知机制,如文件增长、删除等事宜可以急速让用户态得知,该机制是有名的桌面搜刮引擎项目 beagle 惹人的,并在 Gamin 等项目中被应用。
2. 用户接口
在用户态,inotify 经由过程三个体系调用和在返回的文件描述符汕9依υ?件 I/ 操作来应用,应用 inotify 的第一步是创建 inotify 实例:
- int fd = inotify_init ();
每一个 inotify 实例对应一个自力的排序的队列。
文件体系的变更事宜被称做 watches 的一个对象治理,每一个 watch 是一个二元组(目标,事宜掩码),目标可所以文件或目次,事宜掩码表示应用欲望存眷的 inotify 事宜,每一个位对应一个 inotify 事宜。Watch 对象经由过程 watch描述符引用,watches 经由过程文件或目次的路径名来添加。目次 watches 将返回在该目次下的所有文件膳绫擎产生的事宜。
下面函数用于添加一个 watch:
- int wd = inotify_add_watch (fd, path, mask);
fd 是 inotify_init() 返回的文件描述符,path 是被监督的目标的路径名(即文件名或目次名),mask 是事宜掩码, 在头文件 linux/inotify.h 中定义了每一位代表的事宜。可以应用同样的方法来修改事宜掩码,即改变欲望被通知的inotify 事宜。Wd 是 watch 描述符。
下面的函数用于删除一个 watch:
- int ret = inotify_rm_watch (fd, wd);
fd 是 inotify_init() 返回的文件描述符,wd 是 inotify_add_watch() 返回的 watch 描述符。Ret 是函数的返回值。
下面是一个应用 inotify 来监督文件体系事宜的例子:
文件事宜用一个 inotify_event 构造表示,它经由过程由 inotify_init() 返回的文件描述符应用平日文件攫取函数 read 来获得:
- struct inotify_event {
- __s32 wd; /* watch descriptor */
- __u32 mask; /* watch mask */
- __u32 cookie; /* cookie to synchronize two events */
- __u32 len; /* length (including nulls) of name */
- char name[0]; /* stub for possible name */
- };
构造中的 wd 为被监督目标的 watch 描述符,mask 为事宜掩码,len 为 name字符串的长度,name 为被监督目标的路径名,该构造的 name 字段为一个桩,它只是为了用户方面引用文件名,文件名是变长的,它实际紧跟在该构造的后面,文件名将被 0 填充以使下一?事宜构造可以或许 4 字节对齐。留意,len 也把填充字节数统计在内。
经由过程 read 调用可以一次获得多个事宜,只要供给的 buf 足够大年夜。
- size_t len =
推荐阅读
云给安然带来的影响距离2006年Amazon宣布EC2办事已经以前了11年,在这11年迈,产生的不仅仅是AWS收入大年夜几十万美金上涨到100多亿美金,更重要的是云计算已经走进每一俭朴业。根据信通院宣布的&ldquo>>>详细阅读
本文标题:Linux inotify功能及实现原理
地址:http://www.17bianji.com/lsqh/37802.html
1/2 1