inotify监控Linux文件系统的必备利器
inotify 实例的文件描述符之后,就需要增加一个或多个监控. 可以使用掩码来设置想要监控的事件.在本例当中,采用掩码 IN_ALL_EVENTS,来监控全部的有效事件.
清单 4. 使用 inotify_add_watch 1.int watch_dir (int fd, const char *dirname, unsigned long mask) 2.{ 3.int wd; 4.wd = inotify_add_watch (fd, dirname, mask); 5.if (wd < 0) 6.{ 7.printf ("Cannot add watch for "%s" with event mask %lX", dirname, 8.mask); 9.fflush (stdout); 10.perror (" "); 11.} 12.else 13.{ 14.watched_items ; 15.printf ("Watching %s WD=%dn", dirname, wd); 16.printf ("Watching = %d itemsn", watched_items); 17.} 18.return wd; 19.} 事件处理循环 现在我们已经设置了一些监控,接下来就要等待事件.如果还存在监控,并且 keep_running 标志没有被信号处理程序重置,则循环会一直进行.循环进程等待事件的发生,对有效事件进行排队,并在返回等待状态之前并处理队列. 在真实应用程序当中,可能会采用一个线程将事件放入队列,而采用另一个线程处理它们,清单 5 展示了该循环. 清单 5. 事件处理循环 1.int process_inotify_events (queue_t q, int fd) 2.{ 3.while (keep_running && (watched_items > 0)) 4.{ 5.if (event_check (fd) > 0) 6.{ 7.int r; 8.r = read_events (q, fd); 9.if (r < 0) 10.{ 11.break; 12.} 安全 您可能会安全原因,需要对特定文件或目录的所有访问进行监控. 我们的样例代码监控所有事件并进行报告.实际上,您可能想依据您的需要,来查看这些事件的特定子集.您可能想监控不同被监控项目的不同事件.例如,您可能想监控文件的打开与关闭事件,但对于目录只想监控创建与删除事件.在任何可能的时候,您可以监控您所感兴趣的最小事件集. 结束语 在应用到性能监控,程序调试,以及自动化等领域时,inotify 是功能强大,高级粒度机制的 Linux 文件系统监控工具.利用本文提供的样例代码,您可以开始编写用来实时记录文件系统事件并最小化性能开销的应用程序. |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |