在cp命令之后理解inotify事件

时间:2015-04-02 12:55:58

标签: c centos inotify cp

我使用inotify编写了一个C程序来监视一些目录(' a') (在CentOS 6.5上运行)。

跑完后:

  

cp b / txt_file a /

我收到了2件事: 1)IN_MODIFY。
2)IN_CLOSE_WRITE。

再次复制同一文件后:

  

cp b / txt_file a /

我收到3个事件:
1)IN_MODIFY。
2)IN_MODIFY。
3)IN_CLOSE_WRITE。

额外的IN_MODIFY来自哪里?


解决

我刚刚编写了一个示例程序来测试它:

int main ()  
{  
  int fd, wd;  

  fd = inotify_init1 (IN_NONBLOCK);  

  printf("fd: %d %d\n", fd, errno);  

  wd =
    inotify_add_watch (fd, "/home/geotool/a",
           IN_MODIFY | IN_CREATE | IN_DELETE | IN_MOVED_TO |
           IN_CLOSE_WRITE);  

  char buf[4096]
    __attribute__ ((aligned (__alignof__ (struct inotify_event))));
  const struct inotify_event *event;

  int i;

  ssize_t len;
  char *ptr;


  for (;;)
  {
    /* Read some events. */
    len = read (fd, buf, sizeof buf);

    for (ptr = buf; ptr < buf + len;
     ptr += sizeof (struct inotify_event) + event->len)
    {
      event = (const struct inotify_event *) ptr;

      if (event->mask & IN_ISDIR)
        continue;

      if (event->mask & IN_CREATE)
        printf ("Created: %s\n", event->name);
      else if (event->mask & IN_MODIFY)
        printf ("Modified: %s\n", event->name);
      else if (event->mask & IN_DELETE)
        printf ("Deleted: %s\n", event->name);
      else if (event->mask & IN_CLOSE_WRITE)
        printf ("Closed write: %s\n", event->name);
      else
        printf("dunno %s\n", event->name);
    }
  }

  return 0;
}

复制文件后我收到了多个IN_MODIFY事件(&#39; cp&#39;)。 经过一些搜索后,我意识到在复制大文件时,可能会生成多个IN_MODIFY事件。

1 个答案:

答案 0 :(得分:0)

1)IN_MODIFY。 - 目录事件 2)IN_MODIFY。 - 文件事件 3)IN_CLOSE_WRITE。 - 文件事件。