【问题标题】:Why can one remove/rename open files in Linux? [closed]为什么可以在 Linux 中删除/重命名打开的文件? [关闭]
【发布时间】:2013-05-18 17:41:02
【问题描述】:

我了解到打开的文件不能在 Windows 中被删除/重命名,但 可以在 Linux 中被删除/重命名(默认情况下)。我想我理解 Windows 行为的原因。

现在我想知道 为什么 Linux 允许重命名/删除打开的文件?这个决定背后的设计原理是什么?需要时有哪些用例?

【问题讨论】:

    标签: linux language-agnostic filesystems


    【解决方案1】:

    不同之处在于 linux 处理文件句柄而不是文件名。只要文件句柄有效,您就可以对其进行读写。

    在 linux 中重命名文件不会改变文件句柄。

    一个非常有趣的用例是在打开临时文件后删除它们。 这使得其他所有进程都无法访问该文件,而拥有该文件句柄的进程仍然可以读写。

    【讨论】:

    • 这并不意味着无法访问已删除的文件,只是更加复杂。
    • @jlliagre:我不敢说实话。根据上下文,您可能是对的。即:可能是这在 Linux 中有效,而 POSIX 语义对此没有指定任何内容。等
    • 我建议阅读 inodes 上的 Wikipage,我认为 file inode 是一个比 file handle 更精确的词(这让我觉得<stdio.h>FILE)
    • 使用实现某种 /proc 文件系统的操作系统很容易访问已删除但仍打开的文件。这包括 Linux、Solaris、AIX 和可能的其他。尽管 POSIX 未指定,但这是不可移植的。
    猜你喜欢
    • 2013-11-24
    • 2017-03-27
    • 2014-09-14
    • 2016-11-20
    • 2012-07-08
    • 1970-01-01
    • 2012-07-20
    • 2015-09-14
    • 1970-01-01
    相关资源
    最近更新 更多