linux inotify函数,Linux inotify功能及实现原理

read(fd, buf, BUF_LEN);

buf 是一个 inotify_event 构造的数组指针,BUF_LEN 指定要攫取的总长度,buf 大年夜小至少要不小于 BUF_LEN,该调用返回的事宜数取决于 BUF_LEN 以及事宜中文件名的长度。Len 为实际读去的字节数,即获得的事宜的总长度。

可以在函数 inotify_init() 返回的文件描述符 fd 上应用 select() 或poll(), 也可以在 fd 上应用 ioctl 敕令 FIONREAD 来获得当前队列的长度。close(fd)将删除所有添加到 fd 中的 watch 并做须要的清理。intinotify_init (void);

intinotify_add_watch (intfd, constchar*path, __u32 mask);

intinotify_rm_watch (intfd, __u32 mask);

3. 内核实现道理

在内毫闼楝每一个 inotify 实例对应一个 inotify_device 构造:

d_list 指向所有 inotify_device 构成的列表的,i_list 指向所有被监督 inode 构成的列表,count 是引用计数,dev 指向该 watch 地点的 inotify 实例对应的 inotify_device 构造,inode 指向该 watch 要监督的 inode,wd 是分派给该 watch 的描述符,mask 是该 watch 的事宜掩码,表示它对哪些文件体系事宜感兴趣。

构造 inotify_device 在用户态调用 inotify_init() 时创建,当封闭 inotify_init()返回的文件描述符时将被释放。构造 inotify_watch 在用户态调用 inotify_add_watch()时创建,在用户态调用 inotify_rm_watch() 或 close(fd) 时被释放。#ifdef CONFIG_INOTIFY

struct list_head inotify_watches; /* watches onthis inode */

struct semaphore inotify_sem; /* protects the watches list */

#endif

无论是目次照样文件,在内核中都对应一个 inode 构造,inotify 体系在 inode 构造中增长了两个字段:struct inotify_watch {

struct list_head d_list; /* entry ininotify_device's list */

struct list_head i_list; /* entry ininode's list */

atomic_t count; /* referencecount*/

struct inotify_device *dev; /* associated device */

struct inode *inode; /* associated inode */

s32 wd; /* watch descriptor */

u32 mask; /* event mask forthis watch */

};

d_list 指向所有 inotify_device 构成的列表的,i_list 指向所有被监督 inode 构成的列表,count 是引用计数,dev 指向该 watch 地点的 inotify 实例对应的 inotify_device 构造,inode 指向该 watch 要监督的 inode,wd 是分派给该 watch 的描述符,mask 是该 watch 的事宜掩码,表示它对哪些文件体系事宜感兴趣。

构造 inotify_device 在用户态调用 inotify_init() 时创建,当封闭 inotify_init()返回的文件描述符时将被释放。构造 inotify_watch 在用户态调用 inotify_add_watch()时创建,在用户态调用 inotify_rm_watch() 或 close(fd) 时被释放。

无论是目次照样文件,在内核中都对应一个 inode 构造,inotify 体系在 inode 构造中增长了两个字段:

inotify_watches 是在被监督目标上的 watch 列表,每当用户调用 inotify_add_watch()时,内核就为添加的 watch 创建一个 inotify_watch 构造,并把它插入到被监督目标对应的 inode 的 inotify_watches 列表。inotify_sem 用于同步对 inotify_watches 列表的拜访。当文件体系产生第一部分提到的事宜之一时,响应的文件体系代码将显示调用fsnotify_* 来把响应的事宜申报给 inotify 体系,个中*号就是响应的事宜名,今朝实现包含:

推荐阅读

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值