如何解决如何使用inotify实例同时监控两条路径?
在这两个函数中,我使用 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]);
}
解决方法
这看起来更像是scanf
而不是inotify
问题:
printf("Choose the source path: ");
scanf("%s",pathname1);
inotifyFunc(pathname1,&monitor.mask[0]);
在这种情况下,scanf("%s",...)
不消耗换行符 - The scanf function,the specifer %s and the new line
通常,您会这样做:scanf("%s\n",pathname1)
和 scanf("%s\n",pathname2)
相同
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。