如何解决如何监视目录或文件是否在 C 中重命名?
我正在使用 inotify instance
进行监控项目。网上搜了一下,有没有办法监控文件名或目录名有没有改名。
如果在 inotify instance
中无法实现,我如何在 C 中监视名称已更改的文件或目录?
解决方法
为 IN_MOVE_FROM
和 IN_MOVED_TO
事件添加一个监视,指定文件或目录所在目录的路径。每当您收到此类事件时,请将事件 name
字段与您感兴趣的文件或目录名称进行比较。
通常,如果创建或修改了一个有趣的文件,您可能最终会观察 IN_CLOSE_WRITE
和 IN_MOVED_TO
事件及其 name
字段;和 IN_DELETE
和 IN_MOVED_FROM
事件,如果一个有趣的文件消失了。
Inotify 事件锚定在父目录 inode 中。也就是说,如果您拥有监视描述符的目录被移动,您会收到一个 IN_MOVE_SELF
事件,但您会继续接收其中的文件和目录的事件,即使它现在位于其他地方。
如果您对特定路径感兴趣,无论它们在程序启动时是否存在 - 您不能在尚不存在的目录上设置监视 - 您需要为每个目录创建一个监视描述符沿着那个路径直到根目录,就像一个链。其中一些您可能需要动态创建。如果其中之一被删除或移动,IN_DELETE_SELF
或 IN_MOVE_SELF
,它及其所有依赖的观察描述符都将被删除。每当现有目录获得 IN_CREATE
或 IN_MOVED_TO
事件且 name
是一个有趣的子目录的名称时,您为其创建一个监视;但您还需要扫描子目录树以查找更多有趣的子子目录,因为这些子目录可能已经存在,或者可能是在您收到此事件和向新子目录添加监视之间创建的。
由于这种复杂性,使用“扁平”树层次结构更容易,您可以在其中监视程序启动时需要存在的一组固定目录。 (也就是说,您监视这些目录中是否有新的/删除的文件和目录,而不是它们的子目录。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。