如何使用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]);
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)