我对进程表和打开文件表有些困惑。
我知道,如果2个进程尝试打开同一文件,则打开文件表中将有2个条目。我试图找出原因。
当2个不同的进程尝试访问同一文件时,为什么在打开文件表中创建了2个条目?为什么只有1个条目无法完成?
答案 0 :(得分:2)
我不太清楚“文件表”的含义。 Linux内核中没有称为“文件表”的通用结构。
有/etc/fstab
,代表“文件系统表”,其中列出了引导系统时自动挂载的文件系统。
此问题中包含的“文件表”堆栈溢出标记用于SQL Server,并且不直接与Linux连接。
当您谈论打开的文件时,听起来像是链接。参见Hard and soft link mechanism。在Linux中打开文件时,内核会维护基本上是该文件的另一个硬链接。这就是为什么您实际上可以删除打开的文件并且系统将继续正常运行的原因。仅当应用程序关闭文件时,磁盘上的空间才会实际标记为空闲。
因此,对于文件系统上的每个索引节点(索引索引通常是我们认为的文件),通常存在多个链接-目录中的每个条目一个,应用程序每次打开文件时一个链接。
更新:这是启发该问题的网页引文:
每个文件表条目都包含有关当前文件的信息。最重要的是文件的状态,例如文件的读取或写入状态以及其他状态信息。此外,文件表条目保留一个偏移量,该偏移量描述了已从文件读取(或写入)多少字节,指示从下一个位置进行读取/写入。
因此,要直接回答以下问题:“当两个不同的进程试图访问同一文件时,为什么在打开的文件表中创建了两个条目?”,需要两个条目,因为它们可能包含不同的信息。一个进程可能以只读方式打开文件,而另一进程则以只读方式打开。而且几乎每个进程的文件偏移量(文件中的位置)都将有所不同。