Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1052850
  • 博文数量: 836
  • 博客积分: 43880
  • 博客等级: 大将
  • 技术积分: 5485
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-20 17:36
文章分类

全部博文(836)

文章存档

2011年(1)

2008年(835)

我的朋友

分类: LINUX

2008-08-20 18:26:54


Inotify是文件系统事件监控机制,计划包含在即将发布的Linux内核中作为dnotify的有效替代。dnotify是较早内核支持的文件监控机制。Inotify是一种强大的、细粒度的、异步的机制,它满足各种各样的文件监控需要,不仅限于安全和性能。下面让我们一起学习如何安装inotify和如何构建一个示例用户空间应用程序来响应文件系统事件。 文件系统事件监控对于从文件管理器到安全工具的各种程序都是必要的,但是dnotify(早期内核中的标准)存在一些局限性,这使我们期待出现一种更加完善的机制。抱着这种期待,我们发现了inotify,一种更加现代化的文件系统事件监控替代品。 为什么使用inotify? 使用inotify取代dnotify的原因有很多。第一个原因是,dnotify需要您为每个打算监控是否发生改变的目录打开一个文件描述符。当同时监控多个目录时,这会消耗大量的资源,因为有可能达到每个进程的文件描述符限制。 除此之外,文件描述符会锁定目录,不允许卸载(unmount)支持的设备,这在存在可移动介质的环境中会引发问题。在使用inotify时,如果正在监控被卸载的文件系统上的文件,那么监控会被自动移除并且您会接收到一个卸载事件。 dnotify不如inotify的第二个原因是dnotify有点复杂。注意,使用dnotify基础设施的简单文件系统监控粒度只停留于目录级别。为了使用dnotify进行更细粒度的监控,应用程序编程人员必须为每个受监控的目录保留一个stat结构的缓存。该用户空间的stat结构缓存需要用来明确确定当接收到通知信号时目录发生了什么变化。当获得通知信号时,生成stat结构列表并与最新的状态相比较。显而易见,这种技术是不理想的。 inotify的另一个优点是它使用文件描述符作为基本接口,使应用程序开发者使用select和poll来监控设备。这允许有效的多路I/O和与Glib的mainloop的集成。相反,dnotify所使用的信号常常使程序员头疼并且感觉不太优雅。 inotify通过提供一个更优雅的API解决了这些问题,该API使用最少的文件描述符,并确保更细粒度的监控。与inotify的通信是通过设备节点提供的。基于以上原因,对于监控Linux2.6平台上的文件,inotify是您最明智的选择。 安装inotify 安装inotify的第一步是确定您使用的Linux内核是否支持它。检查发行版的最简单方法是,寻找是否存在/dev/inotify设备。如果存在该设备,您可以跳到在简单应用程序中使用inotify一节。 在撰写本文时,inotify包含在AndrewMorton的Linux2.6-mm目录树中,而且一些Linux发行版正在提供支持inotify的内核(包括Gentoo和Ubuntu)或者具有提供支持的补充内核包(例如Fedora和SuSE)。因为Andrew可能会根据需要从目录树删除对inotify的支持,并且inotify版本还处于频繁的开发阶段,所以强烈建议您从头开始打补丁。 如果缺少该设备,您可能需要对内核打补丁并创建该设备。 1 2 3 4 5 下一页>>


下载本文示例代码
阅读(410) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~