Unix系统文件表
我对Unix系统文件表感到困惑Unix系统文件表,unix,system,filetable,Unix,System,Filetable,我对Unix系统文件表感到困惑 当两个或多个进程打开一个文件进行读取时,系统文件表是为每个进程创建单独的条目还是为单个条目创建单独的条目 如果为打开同一文件的多个进程创建一个条目,它们的文件偏移量是否也相同 如果process1打开file1.txt进行读取,而process2打开同一个文件file1.txt进行写入,系统文件表会创建一个或两个条目吗 有三个“系统文件表”:有一个文件描述符表,用于将文件描述符(小整数)映射到打开的文件表中的条目。打开文件表中的每个条目都包含(除其他外)一个文件
- 当两个或多个进程打开一个文件进行读取时,系统文件表是为每个进程创建单独的条目还是为单个条目创建单独的条目
- 如果为打开同一文件的多个进程创建一个条目,它们的文件偏移量是否也相同
- 如果
打开process1
进行读取,而file1.txt
打开同一个文件process2
进行写入,系统文件表会创建一个或两个条目吗file1.txt
open()
调用都有一个,如果文件描述符是dup()
ed或fork()
ed,则共享一个
回答您的问题:
先生,这怎么可能是复制品?他问的是亲子关系和fork之类的问题,我的问题是不同,我们的问题是关于打开的文件和进程;另一个问题是关于打开的文件和
fork
。进程由fork
系统调用创建。因此,它们本质上是相同的问题。有打开的文件表和内存中的索引节点表。。。这两个都是“系统”文件表,因为它们由系统(OS)维护。你的问题是关于打开文件的,所以必须是关于前者,而不是后者。据我所知,至少有三个表。文件描述符表、系统文件表和内存索引节点表这张图显示,如果两个不同的进程打开一个文件,计数器将在打开的文件表(我认为是系统文件表)中递增。所以我认为系统文件表的行为same@Alfred不,它没有显示这一点。正如我所说的,当条目被复制或进程被分叉时(这就是为什么会有两个进程指向同一个打开的文件表条目)——也就是当打开的文件条目计数器递增时,条目被共享。我已经给了你答案;如果您认为这是错误的,请发布您自己的问题答案。@Alfred再次注意,每个open
调用有一个打开的文件表条目,每个打开的文件在内存中有一个inode表条目。。。如果两个进程打开同一个文件,则后者将使其计数递增。