今天偶尔在查找内核代码的时候看到了内核注册的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) |