为什么可以在Linux中删除/重命名打开的文件?

3
我了解到在Windows中,已打开的文件是不能被删除或重命名的,但在Linux中可以(默认情况下)。我认为我理解了Windows行为的原因。
现在我想知道,为什么Linux允许重命名/删除打开的文件?这个决定背后的设计理念是什么?有哪些使用案例需要这样做?
1个回答

6

不同之处在于Linux使用文件句柄而不是文件名。只要文件句柄有效,就可以读写它。

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

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


1
这并不意味着访问已删除的文件是不可能的,只是更加复杂了。 - jlliagre
@jlliagre:老实说,我不确定。根据上下文,你可能是对的。例如:这在Linux中可能有效,而POSIX语义并未对此做出任何规定。等等。 - Alexander Oh
1
我建议阅读有关“inode”的Wikipage(http://en.wikipedia.org/wiki/Inode),我认为“文件inode”是比“文件句柄”更精确的词(这让我想起了`<stdio.h>中的FILE`)。 - Basile Starynkevitch
2
通过实现某种/proc文件系统,访问已删除但仍处于打开状态的文件在操作系统中非常容易。这包括Linux、Solaris、AIX和可能还有其他操作系统。尽管POSIX没有指定,但这是不可移植的。 - jlliagre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接