buf 是一个 inotify_event 构造的数组指针,BUF_LEN 指定要攫取的总长度,buf 大年夜小至少要不小于 BUF_LEN,该调用返回的事宜数取决于 BUF_LEN 以及事宜中文件名的长度。Len 为实际读去的字节数,即获得的事宜的总长度。
可以在函数 inotify_init() 返回的文件描述符 fd 上应用 select() 或poll(), 也可以在 fd 上应用 ioctl 敕令 FIONREAD 来获得当前队列的长度。close(fd)将删除所有添加到 fd 中的 watch 并做须要的清理。
- int inotify_init (void);
- int inotify_add_watch (int fd, const char *path, __u32 mask);
- int inotify_rm_watch (int fd, __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 on this inode */
- struct semaphore inotify_sem; /* protects the watches list */
- #endif
无论是目次照样文件,在内核中都对应一个 inode 构造,inotify 体系在 inode 构造中增长了两个字段:
- struct inotify_watch {
- struct list_head d_list; /* entry in inotify_device's list */
- struct list_head i_list; /* entry in inode's list */
- atomic_t count; /* reference count */
- struct inotify_device *dev; /* associated device */
- struct inode *inode; /* associated inode */
- s32 wd; /* watch descriptor */
- u32 mask; /* event mask for this 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>>>详细阅读
本文标题:Linux inotify功能及实现原理
地址:http://www.17bianji.com/lsqh/37802.html
1/2 1