关于使用inotify监测文件目录发现的问题

众所周知,inotify 是一个内核用于通知用户空间程序文件系统变化的机制,可以用于监控文件系统,比如、创建、删除、读、写操作等,当发生对应事件时,则会触发 inotify。

1、主要API
#include<sys/inotify.h> 
1int inotify_init(void); //创建一个 inotify 实例并返回一个引用 inotify 实例的文件描述符

2int inotify_add_watch(int fd,const char *pathname,uint32_t mask);  //向fd 所指的 inotify监控列表添加新的监控项 。

3int inotify_rm_watch(int fd, int wd);//移除监测列表中wd所指向的监控的对象,wd为inotify_add_watch()返回值。

关于API的使用介绍已经很多了,不再赘述。

2、存储 inotify 事件 结构体 struct inotify_event,struct inotify_event *event

  1. 当event->len == 0 时,event->name __flexarr为空,监测项为文件。使用inotify_add_watch添加需要监测的文件时,若文件不存在,则添加失败,监测事件不会生效。

  2. 当使用vi/vim编辑文件时,触发事件掩码为IN_MOVE_SELF、IN_ATTRIB、IN_DELETE_SELF、IN_IGNORED,当使用桌面方式gedit编辑文件时,触发事件掩码为IN_MOVE_SELF、IN_ATTRIB、IN_DELETE_SELF、IN_IGNORED,原因是有些系统或编辑器,在打开一个文件时,会先创建一个副本,或者临时文件,编辑或者修改的文件实际是临时文件,在保存时,会用临时文件替换源文件,所以可能会触发诸多事件,临时文件可能会长久存在。
    3)特别注意,因修改文件后保存时源文件被删除或者替换,会自动调用inotify_rm_watch()从监测列表中移除被修改的文件监控描述符wd,触发事件IN_IGNORED,如需持续监测,在接收到IN_IGNORED事件掩码后,需要重新调用inotify_add_watch()将需要监测的文件重新添加到监测列表。测试系统为凝思6.08

4)当event->len > 0时,该监控项为目录或目录下的文件,event->name __flexarr为监测项的子项名,当监控目录时,与该目录自身以及该目录下面的文件都会被监控。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值