Answers:
程序通过文件系统维护的编号(在传统的UNIX文件系统上称为inode)连接到文件,名称仅是对其的引用(可能不是唯一的引用)。
有几件事要注意:
mv
除非在文件系统之间移动文件,否则使用来移动文件不会更改该下标编号(等同于在原始文件上使用cp
then rm
)。open
文件时,它引用该文件(对于删除数据的目的而言)等同于具有连接到文件名的文件。这引起了以下几种行为:
open
读取文件,但直到用户rm
在命令行上对其进行编辑后才可以实际读取文件,并且该程序仍然可以访问数据。mv
生成文件并不会断开文件与打开该文件的任何程序之间的关系(除非您跨越文件系统边界,在这种情况下,该程序仍具有原始版本可以使用)。open
编写了一个文件来写入文件,并且用户rm
在命令行中使用了文件的最后一个文件名,则该程序可以继续将内容直接放入文件中,但是一旦关闭,就不再有对该数据的引用,并且它会消失。open
。(这不是真正的安全思想,它只是将一个巨大的漏洞转换为竞争条件。)open
读取和写入文件(问题中的日志文件发生了什么)。
要真正了解这种行为是如何实现的,可以看一些Unix编程书籍。Mathepic是正确的,因为它与inode有关。实际的路径名仅用于打开文件,一旦完成,程序将通过其打开的文件描述符对其进行引用。文件描述符反过来引用索引节点,在这种情况下,索引节点并不关心基础文件名称是否已更改。
至于在Windows中实现这一点,这是另一个站点的问题。
要了解更多有关此方面的知识而又不打书,只需搜索linux文件系统和inode。可能没有一个明确的答案,但是您将能够理解原因。