Chinaunix首页 | 论坛 | 博客
  • 博客访问: 379979
  • 博文数量: 73
  • 博客积分: 3574
  • 博客等级: 中校
  • 技术积分: 1503
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-26 11:17
文章分类

全部博文(73)

文章存档

2012年(14)

2011年(15)

2010年(44)

分类: LINUX

2011-12-27 21:53:29

   今天偶尔在查找内核代码的时候看到了内核注册的inotify结构,当时没有细看,回头闲的时候再次想起,就把打算把这个东西稍微研究一下。从字面来看应该就是一个通知结构,类似于内核中用处最多的通知链结构notification chain,只不过它主要用于完成对文件操作动作的监控与通知。

   详细的内核实现没有看,如果有机会再去仔细分析下实现机制。不过大致意思就是,用户空间:首先创建一个inotify实例,然后根据文件路径以及需要监听的动作创建一个描述符,最后就对inotify fd进行read操作,如果所指定的文件发送了设定的动作,如打开,读、写等,read就会返回,通过返回值告知事件的发生。
   内核空间:对于每一个inotify实例都对应一个inotify device结构,结构上主要含有一个等待队列,所有监听的进程都在等待队列上睡眠,以及一个链表用于保存所有发生的监听动作,同时结构中有专门的结构用于与文件的inode结点联系;当对一个文件进行操作时,首先通过inode结构上的相关域进行判断,如果有监听进程,则生成相应的事件结构加载到inotify device的链表上,并最终由device结构唤醒用户进程。

   这个inotify用途主要是在对于系统文件的检索上,在第一次遍历系统所有文件生成索引后,对文件进行监听,对发生指定动作的文件进行索引的修改、删除操作,避免了更多的遍历次数。

  
   其实,这些都不是我要表达的重点,inotify网上的资料不多,主要是看了linux Documentation中关于inotify的文档,后来又浏览了下Doc目录下的所有txt文件,发现有很多感兴趣的意外收获,看来以后要多关注这些说明文件了,又多了一个学习途径,加油~
阅读(1319) | 评论(0) | 转发(0) |
0

上一篇:kmsg与netoops

下一篇:带颜色的echo

给主人留下些什么吧!~~