使用 inotify 监控文件系统的活动
结构.
在文件 /usr/include/sys/inotify.h. 中,您可以找到事件结构的定义,它是一种 C 结构,如清单 2 所示.
wd 字段是指与事件相关联的监视器.如果每个 inotify 有一个以上的实例,您可以使用这个字段确定如何继续以后的处理过程.mask 字段由几个部分组成,它说明发生的事情.分别测试每个部分. 当把一个文件从一个目录移动到另一个目录时,您可以使用 cookie 将两个事件绑在一起.仅当您监视源和目标目录时,inotify 才生成两个移动事件 — 分别针对源和目标 —,并通过设置 cookie 将它们绑定在一起.要监视一个移动操作,指定 IN_MOVED_FROM 或 IN_MOVED_TO,或使用简短的 IN_MOVE,它可以监视两个操作.使用 IN_MOVED_FROM 和 IN_MOVED_TO 来测试事件类型. ,name 和 len 包含文件的名称(但不包括路径)和受影响文件的名称的长度. 构建示例应用程序代码 要构建这些代码,请将目录 /home/strike 更改到您的主目录,即将这些代码保存到一个文件中,然后调用 C 编译器 — 在大部分 Linux 系统中为 gcc.然后,运行这个可执行文件,如清单 3 所示.
在监视程序运行时,打开第二个终端窗口并使用 touch、cat 和 rm 来更改主目录的内容,如清单 4 所示.完成之后,重新启动您的新应用程序.
试用其他可用的监视标志.要捕捉权限的更改,请将 IN_ATTRIB 添加到 mask.
使用 inotify 的技巧 您还可以使用 select()、pselect()、poll() 和 epoll() 来避免阻塞.如果您想将监视器的监控作为图形应用程序的主事件处理循环的一部分,或作为监视其他输入连接的守护进程的一部分,这是很有用的.将该 inotify 描述符添加到这组描述符中,进行并发监控.清单 5 展示了 select() 的标准形式. 清单 5. select() 的标准形式
select() 方法在 time_to_wait 期间暂停程序.然而,如果在这个 |
||||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |