问题描述
在这两个函数中,我使用 inotify instance
来监控路径,我想同时监控两条路径,但是在给出源和目标的位置后,程序给了我一条消息正在监视位置,但这次我调用的 inotifyFunc
不起作用并且程序关闭。我不知道为什么?
虽然我也将 while(1)
循环置于 read(monitor.fd,monitor.buffer,BUFFER_LEN);
之上,但它有一个问题,即每当我进入源路径时,它就会停在那里并且没有问我目标路径。这就是我删除 while(1)
的原因。
有没有其他解决办法?
void inotifyFunc(char *path,uint32_t *maskPtr)
{
int i = 0;
monitor.fd = inotify_init();
if(fcntl(monitor.fd,F_SETFL,O_NONBLOCK)){
perror("inotify not initialized: ");
exit(0);
}
monitor.wd = inotify_add_watch(monitor.fd,path,*maskPtr);
if(monitor.wd < 0){
perror("Sorry");
exit(1);
}
monitor.length = read(monitor.fd,BUFFER_LEN);
while(i<monitor.length){
struct inotify_event *event = (struct inotify_event *)&monitor.buffer[i];
if(event->len){
if(event->mask & *maskPtr){
if(event->mask & IN_ISDIR){
printf("Directory is created\n");
break;
}
else{
printf("File is created\n");
break;
}
}
}
i+= EVENT_SIZE + event->len;
}
}
void monitoringSystem(char *pathname1,char *pathname2){
monitor.mask[0] = ENOENT;
monitor.mask[1] = IN_CREATE;
printf("Choose the source path: ");
scanf("%s",pathname1);
inotifyFunc(pathname1,&monitor.mask[0]);
printf("Choose the destination path: ");
scanf("%s",pathname2);
inotifyFunc(pathname2,&monitor.mask[0]);
printf("\nBoth locations are being monitored\n");
inotifyFunc(pathname1,&monitor.mask[1]);
inotifyFunc(pathname2,&monitor.mask[1]);
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)