繁体   English   中英

如何监控多个位置并为每个路径分别显示一条消息?

[英]How to monitor multiple locations and show a message separately for each path?

在这段代码中,我试图监控一个文件系统。 但是我面临的问题是我同时监视两个位置,为此我做了一个if-statement ,例如if(wd1) (在路径名 1 中创建的文件)然后通知我第一个路径和if(wd2) (在路径名 2 中创建的文件)然后通知我第二条路径。

但即使我在pathname2中创建一个文件,它也会给我pathname1的消息。 如何使这个if-statement起作用?

int main(){
  int length, i = 0, fd, wd1, wd2;
  char buffer[EVENT_BUF_LEN];
  char pathname1[200] = "path/to/location1";
  char pathname2[200] = "path/to/location2";

  fd = inotify_init();    
  wd1 = inotify_add_watch(fd, pathname1, IN_CREATE);
  wd2 = inotify_add_watch(fd, pathname2, IN_CREATE);
  length = read( fd, buffer, EVENT_BUF_LEN ); 

  while(i < length){     
      struct inotify_event *event = (struct inotify_event *)&buffer[i];
      if(event->len){
          if(event->mask & IN_CREATE){
             if(wd1){
               printf("New file is '%s' created in %s\n", event->name, pathname1);
             }
             else if(wd2){
               printf("New file is '%s' created in %s\n", event->name, pathname2);
             }
          }
      }
      i += EVENT_SIZE + event->len;
  }
  inotify_rm_watch(fd, wd1);
  inotify_rm_watch(fd, wd2);
  close(fd);
}

以下行不是您想要的:

if(wd1){

此行仅检查inotify_add_watch function 的返回值,而此 function 不太可能返回 0。您最可能的意思是:

if(event->wd == wd1){

这会将先前返回的 wd1 值与触发的事件的监视文件描述符进行比较。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM