如何解决如何监视文件系统路径名在 C 或 inotify 中被重命名?
在这段代码中,我正在监视一个文件和一个目录。但是我有一个要解决的问题,那就是,重命名哪个文件或目录的条件是什么?尽管 IN_MODIFY
仅在修改文件文本时才适用于该文件。但我想监视文件或目录是否被重命名
可以使用 inotify
或 C
吗?
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_FROM
和 IN_MOVED_TO
。重命名将显示为 IN_MOVED_FROM
事件,然后是具有相同 IN_MOVED_TO
值的 cookie
事件,以便您可以将它们关联起来。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。