实现对文件的实时监控--使用Inotify方法

这篇博客介绍了Linux系统下如何使用Inotify API来监控文件或目录的更改。Inotify机制可以监控文件和目录的多种事件,包括创建、删除、修改等。文章详细讲解了API的使用、事件类型以及如何通过select()函数读取和处理inotify事件。监控文件目录比直接监控文件更稳定,因为直接监控文件可能因文件被删除和重建而失效。
摘要由CSDN通过智能技术生成

linux系统下监控文件更改–Inotify API使用方法

1.简介:
  • 1.inotify机制可用于监控文件或目录。当监控目录时,与该目录自身以及该目录下面的文件都会被监控,其上有事件发生时都会通知给应用程序
  • 2.otify监控机制为非递归,若应用程序有意监控整个目录子树内的事件,则需对该树中的每个目录发起inotify_add_watch()调用
  • 可使用select(),poll(),epoll()以及由信号驱动的I/O来监控inotify文件描述符
    ps:后面结合select()使用。
2.API
#include<sys/inotify.h>  
int inotify_init(void);  

该函数的返回值为一个文件描述符,我们可以简单的理解为该文件描述符所指代的文件中将会保存类似所监控的目录所发生的事件集

#include<sys/inotify.h>  
int inotify_add_watch(int fd,const char *pathname,uint32_t mask); 

针对fd所指的inotify实例的监控列表,系统调用inotify_add_watch()可以追加新的监控项。

参数pathname为想要创建的监控项所对应的文件,特别注意调用该接口必须要对该文件有读权限,该函数只对文件做一次检查,如果在监控时修改了所监控的文件读权限,则不会影响继续监控此文件

参数mask为一位掩码,针对pathname定义了想要监控的事件,此函数的返回值为一个用于唯一指代此监控项的描述符

3.事件
IN_ACCESS               文件被访问
IN_ATTRIB               文件元数据改变
IN_CLOSE_WRITE          关闭为了写入而打开的文件
IN_CREATE               在受监控目录下创建了文件或目录
IN_DELETE               在受监控目录内删除了文件或目录
IN_DELETE_SELF          删除了受监控目录/文件本身
IN_MODIFY               文件被修改
IN_MODIFY_SELF          移动受监控目录或文件本身
IN_MOVED_FROM           文件移除受监控目录
IN_MOVED_TO         将文件移到受监控目录
IN_OPEN                 文件被打开

IN_ALL_EVENTS           以上所有输出事件的统称
IN_MOVE             IN_MOVED_FROM | IN_MOVED_TO事件的统称
IN_ONESHOT              只监控pathname的一个事件
IN_ONLYDIR              pathname不为目录时会失败
4.读取inotify事件

将监控项项在监控列表中登记后,应运程序可用read()从inotify的文件描述符中读取事件,以判定发生了那些事件。若读取之时还没有发生任何事件,则read()会阻塞,直至有事件产生,事件发生后,每

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值