当前位置: 技术问答>linux和unix
关于inotify的一个问题
来源: 互联网 发布时间:2016-07-28
本文导语: 我用inotify来监视文件夹下的创建,读以及写操作,具体的代码我不写了,因为在虚拟机里写的,弄出来有点麻烦。我就简单写一些片段: if(len){ printf("%s ",ie->name); if(ie->mask & IN_ACCESS) printf("read occurs...
我用inotify来监视文件夹下的创建,读以及写操作,具体的代码我不写了,因为在虚拟机里写的,弄出来有点麻烦。我就简单写一些片段:
if(len){
printf("%s ",ie->name);
if(ie->mask & IN_ACCESS) printf("read occursn");
if(ie->mask & IN_MODIFY) printf("modify occursn");
if(ie->mask & IN_CREATE) printf("create occursn");
}
然后问题出现了,如果我用以下的两种mask调用inotify_add_watch函数得到的结果不一样
一种是直接IN_ALL_EVENTS
一种是 IN_ACCESS | IN_MODIFY | IN_CREATE
如果我在终端执行这样的操作 echo "hello" > new
两种显示分别是
new create occurs
new new modify occurs
new
还有一个是正常的
new create occurs
new modify occurs
我奇怪的是为什么那种不大对的显示会那样?大家能解答一下吗,谢谢了
if(len){
printf("%s ",ie->name);
if(ie->mask & IN_ACCESS) printf("read occursn");
if(ie->mask & IN_MODIFY) printf("modify occursn");
if(ie->mask & IN_CREATE) printf("create occursn");
}
然后问题出现了,如果我用以下的两种mask调用inotify_add_watch函数得到的结果不一样
一种是直接IN_ALL_EVENTS
一种是 IN_ACCESS | IN_MODIFY | IN_CREATE
如果我在终端执行这样的操作 echo "hello" > new
两种显示分别是
new create occurs
new new modify occurs
new
还有一个是正常的
new create occurs
new modify occurs
我奇怪的是为什么那种不大对的显示会那样?大家能解答一下吗,谢谢了
|
看头文件得知
#define IN_ALL_EVENTS (IN_ACCESS | IN_MODIFY | IN_ATTRIB | IN_CLOSE_WRITE
| IN_CLOSE_NOWRITE | IN_OPEN | IN_MOVED_FROM
| IN_MOVED_TO | IN_CREATE | IN_DELETE
| IN_DELETE_SELF | IN_MOVE_SELF)
那么就是说 echo "hello" > new
除了有IN_CREATE IN_MODIFY 这样的行为外还有其他行为
你可以把ie->mask打印出来,对照头文件,看看具体多了什么掩码
#define IN_ALL_EVENTS (IN_ACCESS | IN_MODIFY | IN_ATTRIB | IN_CLOSE_WRITE
| IN_CLOSE_NOWRITE | IN_OPEN | IN_MOVED_FROM
| IN_MOVED_TO | IN_CREATE | IN_DELETE
| IN_DELETE_SELF | IN_MOVE_SELF)
那么就是说 echo "hello" > new
除了有IN_CREATE IN_MODIFY 这样的行为外还有其他行为
你可以把ie->mask打印出来,对照头文件,看看具体多了什么掩码