【问题标题】:inotify delete_self when modifying and saving a file修改和保存文件时 inotify delete_self
【发布时间】:2010-05-02 20:58:21
【问题描述】:

我正在运行一个小的 inotify 脚本,用于对文件设置监视。每次编辑和保存该文件时,脚本都会注意到触发了 DELETE_SELF 事件。这是正常的吗?如果是为什么? inotify 子系统不应该注意到文件仍然存在吗?

【问题讨论】:

    标签: linux inotify


    【解决方案1】:

    这取决于正在编辑文件的应用程序正在使用它做什么。在这种情况下,听起来您的编辑器在保存文件时的行为是删除旧文件并将新内容写入具有相同名称的新文件。从 inotify 的角度来看,这正是发生的情况,因此它会触发删除事件,然后触发创建事件。 Inotify 无法知道被删除的文件和在其位置创建的文件在逻辑上相关。

    【讨论】:

    • 我尝试过使用 vim、gedit 和 kate - 它们都有相同的行为。您的解释绝对有道理,但我想知道为什么要这样实现?
    • 它的正常工作方式是这样的:您有一个名为moo.txt 的文件正在编辑。保存时,编辑器会将文件写入moo.txt.blah,然后取消链接moo.txt,然后将moo.txt.blah 重命名为moo.txt
    • 实际上,它通常不会执行 unlink() 部分 - rename('moo.txt.blah', 'moo.txt') 将自动取消链接并替换 moo.txt。这就是 为什么 编辑器会这样做 - 因为操作是原子的,如果您的编辑器或系统崩溃,那么您可以保证看到旧文件或新文件 - 而不是写一半混合动力。
    • 如果您不想删除原始文件,请使用ed(标准编辑器)。 :)
    猜你喜欢
    • 2013-09-24
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 2012-05-23
    • 2021-09-08
    相关资源
    最近更新 更多