作家
登录

Linux inotify功能及实现原理

作者: 来源: 2017-10-11 16:08:01 阅读 我要评论


1. inotify重要功能

它是一个内核用于通知用户空间法度榜样文件体系变更的机制。

众所周知,Linux 桌面体系与 MAC 或 Windows 比拟有很多不如人意的处所,为了改良这种状况,开源社区提出用户态须要内核供给一些机制,以便用户态可以或许及时地点知内核或底层硬件设备产生了什么,大年夜而可以或许更好地治理设备,给用户供给更好的办事,如 hotplug、udev 和 inotify 就是这种需求催生的。Hotplug 是一种内核向用户态应用传递关于热插拔设备一些事宜产生的机制,桌面体系可以或许应用它对设备进行有效的治理,udev 动态地保护 /dev 下的设备文件,inotify 是一种文件体系的变更通知机制,如文件增长、删除等事宜可以急速让用户态得知,该机制是有名的桌面搜刮引擎项目 beagle 惹人的,并在 Gamin 等项目中被应用。

2. 用户接口

在用户态,inotify 经由过程三个体系调用和在返回的文件描述符汕9依υ?件 I/ 操作来应用,应用 inotify 的第一步是创建 inotify 实例:

Linux inotify功能及实现道理

  1. int fd = inotify_init (); 

每一个 inotify 实例对应一个自力的排序的队列。

文件体系的变更事宜被称做 watches 的一个对象治理,每一个 watch 是一个二元组(目标,事宜掩码),目标可所以文件或目次,事宜掩码表示应用欲望存眷的 inotify 事宜,每一个位对应一个 inotify 事宜。Watch 对象经由过程 watch描述符引用,watches 经由过程文件或目次的路径名来添加。目次 watches 将返回在该目次下的所有文件膳绫擎产生的事宜。

下面函数用于添加一个 watch:

  1. int wd = inotify_add_watch (fd, path, mask); 

fd 是 inotify_init() 返回的文件描述符,path 是被监督的目标的路径名(即文件名或目次名),mask 是事宜掩码, 在头文件 linux/inotify.h 中定义了每一位代表的事宜。可以应用同样的方法来修改事宜掩码,即改变欲望被通知的inotify 事宜。Wd 是 watch 描述符。

下面的函数用于删除一个 watch:

  1. int ret = inotify_rm_watch (fd, wd); 

fd 是 inotify_init() 返回的文件描述符,wd 是 inotify_add_watch() 返回的 watch 描述符。Ret 是函数的返回值。

下面是一个应用 inotify 来监督文件体系事宜的例子:

文件事宜用一个 inotify_event 构造表示,它经由过程由 inotify_init() 返回的文件描述符应用平日文件攫取函数 read 来获得:

  1. struct inotify_event { 
  2.         __s32           wd;             /* watch descriptor */ 
  3.         __u32           mask;           /* watch mask */ 
  4.         __u32           cookie;         /* cookie to synchronize two events */ 
  5.         __u32           len;            /* length (including nulls) of name */ 
  6.         char            name[0];        /* stub for possible name */ 
  7. };  

构造中的 wd 为被监督目标的 watch 描述符,mask 为事宜掩码,len 为 name字符串的长度,name 为被监督目标的路径名,该构造的 name 字段为一个桩,它只是为了用户方面引用文件名,文件名是变长的,它实际紧跟在该构造的后面,文件名将被 0 填充以使下一?事宜构造可以或许 4 字节对齐。留意,len 也把填充字节数统计在内。

经由过程 read 调用可以一次获得多个事宜,只要供给的 buf 足够大年夜。

  1. size_t len = 
     1/5    1 2 3 4 5 下一页 尾页

      推荐阅读

      AI重新定义Web安全

    云给安然带来的影响距离2006年Amazon宣布EC2办事已经以前了11年,在这11年迈,产生的不仅仅是AWS收入大年夜几十万美金上涨到100多亿美金,更重要的是云计算已经走进每一俭朴业。根据信通院宣布的&ldquo>>>详细阅读


    本文标题:Linux inotify功能及实现原理

    地址:http://www.17bianji.com/lsqh/37802.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)