微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用inotify实例同时监控两条路径?

如何解决如何使用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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?