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

如何监视文件系统路径名在 C 或 inotify 中被重命名?

如何解决如何监视文件系统路径名在 C 或 inotify 中被重命名?

在这代码中,我正在监视一个文件一个目录。但是我有一个解决的问题,那就是,重命名哪个文件或目录的条件是什么?尽管 IN_MODIFY 仅在修改文件文本时才适用于该文件。但我想监视文件或目录是否被重命名

可以使用 inotifyC 吗?

int main(){
  int length,i = 0,fd,wd;
  char buffer[EVENT_BUF_LEN];

  fd = inotify_init();
  if (fd < 0){
      perror( "inotify_init" );
  }
  wd = inotify_add_watch(fd,pathname1,IN_MODIFY);
  length = read( fd,buffer,EVENT_BUF_LEN); 
  if(length < 0){
      perror("read");
  }  

  while(i < length){     
    struct inotify_event *event = ( struct inotify_event *)&buffer[i];
      if(event->len){
          if(event->mask & IN_MODIFY){
              if(event->mask & IN_ISDIR){
                if(event->wd == wd){
                  // if directory name changed. I don't kNow what condition to put
                  printf("The directory name '%s' is changed with %s\n",event->name);
                }
              }
              else{
                if(event->wd == wd){
                  // if file name changed. I don't kNow what condition to put
                  printf("The file name '%s' is changed with %s\n",event->name);
                }
              }
          }
      }
      i += EVENT_SIZE + event->len;
  }
    inotify_rm_watch(fd,wd);
  close(fd);
}

解决方法

是的,这是可能的!

在 Unix 中,文件重命名与文件移动相同。您只是将文件从一个名称“移动”到同一目录中的新名称。

您可以使用 IN_MOVE_SELF 事件来检测您正在观看的文件或目录是否被移动。

但是,我不确定这是否会检测到文件的路径是否因为其父目录之一被移动或重命名而发生变化。如果您也想检查它,则必须监视每个父目录上的事件。当目录包含的文件被移动或重命名时,目录会收到事件 IN_MOVED_FROMIN_MOVED_TO。重命名将显示为 IN_MOVED_FROM 事件,然后是具有相同 IN_MOVED_TO 值的 cookie 事件,以便您可以将它们关联起来。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 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”。这是什么意思?