您的位置:首页 > 运维架构 > Linux

select+inotify监控linux文件变化遇到的坑

2017-10-20 10:50 459 查看
使用select+inotify监控目录里面文件的创建与删除,发现bug.bug描述如下红色部分:

void listenDev(void * ptr) {

inotifyFd=-1;
inotifyFd=inotify_init();
if(inotifyFd==-1)
return ;
int wd=inotify_add_watch(inotifyFd,"/home/xxx/inotify",IN_DELETE);
printf("WD=%d",wd);
if(wd==-1)
{
close(inotifyFd);
return ;
}
fd_set readFds;
FD_ZERO(&readFds);
FD_SET(inotifyFd, &readFds);
struct timeval val;
val.tv_sec = 2;
val.tv_usec = 0;
int r = -1;

while (flag_is_capturing) {

//bug 描述 当select函数最后一个参数设为NULL时,阻塞的情况下,能正常监控。但是当最后一个参数设为&val时,发现这个超时参数根本无效,将一直疯狂打印timeout,并且监控不到文件夹内文件的删除。      解决方案:将select换成epoll工作正常。  求解答

r = select(inotifyFd+ 1, &readFds, NULL, NULL,
NULL);
if (r == -1) {
flag_is_capturing = 0;
break;
} else if (r == 0) {
printf("timeout \n");
continue;
} else {
printf("dir change \n");
flag_is_capturing=0;
break;
}
}

close(inotifyFd);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: