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

如何监视目录或文件是否在 C 中重命名?

如何解决如何监视目录或文件是否在 C 中重命名?

我正在使用 inotify instance 进行监控项目。网上搜了一下,有没有办法监控文件名或目录名有没有改名。

如果在 inotify instance 中无法实现,我如何在 C 中监视名称已更改的文件或目录?

解决方法

IN_MOVE_FROMIN_MOVED_TO 事件添加一个监视,指定文件或目录所在目录的路径。每当您收到此类事件时,请将事件 name 字段与您感兴趣的文件或目录名称进行比较。

通常,如果创建或修改了一个有趣的文件,您可能最终会观察 IN_CLOSE_WRITEIN_MOVED_TO 事件及其 name 字段;和 IN_DELETEIN_MOVED_FROM 事件,如果一个有趣的文件消失了。

Inotify 事件锚定在父目录 inode 中。也就是说,如果您拥有监视描述符的目录被移动,您会收到一个 IN_MOVE_SELF 事件,但您会继续接收其中的文件和目录的事件,即使它现在位于其他地方。

如果您对特定路径感兴趣,无论它们在程序启动时是否存在 - 您不能在尚不存在的目录上设置监视 - 您需要为每个目录创建一个监视描述符沿着那个路径直到根目录,就像一个链。其中一些您可能需要动态创建。如果其中之一被删除或移动,IN_DELETE_SELFIN_MOVE_SELF,它及其所有依赖的观察描述符都将被删除。每当现有目录获得 IN_CREATEIN_MOVED_TO 事件且 name 是一个有趣的子目录的名称时,您为其创建一个监视;但您还需要扫描子目录树以查找更多有趣的子子目录,因为这些子目录可能已经存在,或者可能是在您收到此事件和向新子目录添加监视之间创建的。

由于这种复杂性,使用“扁平”树层次结构更容易,您可以在其中监视程序启动时需要存在的一组固定目录。 (也就是说,您监视这些目录中是否有新的/删除的文件和目录,而不是它们的子目录。)

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