- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
使用 inotify 监控文件系统的活动
Inotify 是一个 Linux? 特性,它监控文件系统操作,比如读取、写入和创建。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。学习如何将 inotify 集成到您的应用程序中,并发现一组可用来进一步自动化系统管理的命令行工具。
系统管理就像日常生活一样。就像刷牙和吃蔬菜一样,日常的维护能保持机器的良好状态。您必须定期清空废物,比如临时文件或无用的日志文件,以及花时间填写表单、回复电话、下载更新和监控进程等。幸好自动化 shell 脚本、使用 Nagios 等工具进行监控、通过常见的 cron 进行任务调度可以减轻这个负担。?但奇怪的是,这些工具没有一个具有响应性。当然,您可以安排一个频繁运行的 cron 任务来监控条件,但这样繁忙的轮询 — 消耗大量资源并且具有不确定性 — 并不是很理想。例如,如果您必须监控输入数据的几个 Transfer Protocol(FTP)收存箱,您可能要通过find命令扫描每个目标目录,列举新的内容。然而,尽管这个操作看起来并没有什么害处,但每个调用都产生一个新的 shell 和find命令,这需要许多系统调用来打开目录,然后扫描目录,等等。这会造成过于频繁的或大量的轮询任务(更糟糕的是,繁忙的轮询并不总是很好。想象一下一个文件系统浏览器,比如 Mac OS X 的 Finder,轮询更新时需要的大量资源及其复杂性)。?那么,管理员应该怎么办呢?令人高兴的是,您可以再次求助于可以信赖的计算机。?了解 inotify?Inotify?是一个 Linux 内核特性,它监控文件系统,并且及时向专门的应用程序发出相关的事件警告,比如删除、读、写和卸载操作等。您还可以跟踪活动的源头和目标等细节。?使用 inotify 很简单:创建一个文件描述符,附加一个或多个监视器(一个监视器?是一个路径和一组事件),然后使用read()方法从描述符获取事件信息。read()并不会用光整个周期,它在事件发生之前是被阻塞的。?更好的是,因为 inotify 通过传统的文件描述符工作,您可以利用传统的select()系统调用来被动地监控监视器和许多其他输入源。两种方法 — 阻塞文件描述符和使用select()— 都避免了繁忙轮询。?现在,让我们深入了解 inotify,写一些 C 代码,然后看看一组命令行工具,您可以构建并使用它们将命令和脚本附加到文件系统事件。Inotify 不会在中途失去控制,但它可以运行cat和wget,并且在必要时严格执行。?要使用 inotify,您必须具备一台带有 2.6.13 或更新内核的 Linux 机器(以前的 Linux 内核版本使用更低级的文件监控器?dnotify)。如果您不知道内核的版本,请转到 shell,输入uname -a:?
% uname -a
Linux ubuntu-desktop 2.6.24-19-generic #1 SMP ... i686 GNU/Linux
??如果列出的内核版本不低于 2.6.13,您的系统就支持 inotify。您还可以检查机器的 /usr/include/sys/inotify.h 文件。如果它存在,表明您的内核支持 inotify。?注意:FreeBSD 和 Mac OS X 提供一个类似于 inotify 的?kqueue。在 FreeBSD 机器上输入man 2 kqueue获取更多信息。?本文基于 Ubuntu Desktop version 8.04.1(即?Hardy),它运行在 Mac OS X version 10.5 Leopard 的 Parallels Desktop version 3.0。???
? ??????
回页首 inotify C API?Inotify 提供 3 个系统调用,它们可以构建各种各样的文件系统监控器:?
inotify_init()在内核中创建 inotify 子系统的一个实例,成功的话将返回一个文件描述符,失败则返回 -1。就像其他系统调用一样,如果inotify_init()失败,请检查errno以获得诊断信息。
顾名思义,inotify_add_watch()用于添加监视器。每个监视器必须提供一个路径名和相关事件的列表(每个事件由一个常量指定,比如 IN_MODIFY)。要监控多个事件,只需在事件之间使用逻辑操作符或?— C 语言中的管道线(|)操作符。如果inotify_add_watch()成功,该调用会为已注册的监视器返回一个惟一的标识符;否则,返回 -1。使用这个标识符更改或删除相关的监视
您可能关注的文档
最近下载
- 2025年水发集团有限公司招聘(216人)笔试备考试题附答案.docx VIP
- 冰雕雪雕工程投标方案(技术方案).docx
- 2025年大众点评必吃榜IP招商推介.pptx VIP
- 药品模拟召回方案.pdf VIP
- 教师招聘面试的培训课件.pptx
- Part 6 Unit 3 Shopping 教案-中职高一英语(高教版基础模块1).docx VIP
- 12S8 河北省12系列建筑标准设计图集 排水工程.pdf VIP
- 职教高考数学复习平面向量 6.1平面向量的概念及线性运算 课件.pptx VIP
- Part 5 Unit 3 Shopping 教案-中职高一英语(高教版基础模块1).docx VIP
- 药品参考模拟召回方案.doc VIP
原创力文档


文档评论(0)