【发布时间】:2010-05-02 20:58:21
【问题描述】:
我正在运行一个小的 inotify 脚本,用于对文件设置监视。每次编辑和保存该文件时,脚本都会注意到触发了 DELETE_SELF 事件。这是正常的吗?如果是为什么? inotify 子系统不应该注意到文件仍然存在吗?
【问题讨论】:
我正在运行一个小的 inotify 脚本,用于对文件设置监视。每次编辑和保存该文件时,脚本都会注意到触发了 DELETE_SELF 事件。这是正常的吗?如果是为什么? inotify 子系统不应该注意到文件仍然存在吗?
【问题讨论】:
这取决于正在编辑文件的应用程序正在使用它做什么。在这种情况下,听起来您的编辑器在保存文件时的行为是删除旧文件并将新内容写入具有相同名称的新文件。从 inotify 的角度来看,这正是发生的情况,因此它会触发删除事件,然后触发创建事件。 Inotify 无法知道被删除的文件和在其位置创建的文件在逻辑上相关。
【讨论】:
moo.txt 的文件正在编辑。保存时,编辑器会将文件写入moo.txt.blah,然后取消链接moo.txt,然后将moo.txt.blah 重命名为moo.txt。
unlink() 部分 - rename('moo.txt.blah', 'moo.txt') 将自动取消链接并替换 moo.txt。这就是 为什么 编辑器会这样做 - 因为操作是原子的,如果您的编辑器或系统崩溃,那么您可以保证看到旧文件或新文件 - 而不是写一半混合动力。
ed(标准编辑器)。 :)