Unix系统文件表

Alf*_*red 11 unix system filetable

我对Unix系统文件表感到困惑.

  • 当两个或多个进程打开文件进行读取时,系统文件表是否为每个进程或单个条目创建单独的条目?

  • 如果为打开同一文件的多个进程创建单个条目,它们的文件偏移量是否也相同?

  • 如果process 1打开file1.txt以进行读取并process 2打开相同的文件file1.txt进行写入,系统文件表是否会创建一个或两个条目?

Jim*_*ter 27

有三个"系统文件表":有一个文件描述符表,它将文件描述符(小整数)映射到打开文件表中的条目.打开文件表中的每个条目包含(除其他外)文件偏移量和指向内存中inode表的指针.这是一张图片:

因此,打开文件既没有一个文件表条目,也没有每个进程只有一个...每个open()调用都有一个,如果dup()编辑或fork()编辑了文件描述符,它就会被共享.

回答你的问题:

1)当两个或多个进程打开文件进行读取时,每次打开时打开文件表中都有一个条目.如果一个进程多次打开文件,则每个打开时甚至会有一个条目.

2)单个条目在打开文件表创建为不同进程打开相同的文件(但在内存中的节点表只有一个条目).

3)如果file1.txt打开两次,在相同或两个不同的进程中,有两个不同的打开文件表条目(但在内存中的inode表中只有一个条目).

  • 有一个打开的文件表,并且有内存中的inode表......这两个都是"系统"文件表,因为它们是由系统(OS)维护的.你的问题是关于打开文件,所以它必须是前者,而不是后者. (2认同)
  • @Alfred不,它没有表明.正如我所说的那样,条目在被复制或者进程被分叉时被共享(这就是你如何让两个进程指向同一个打开的文件表条目) - **就是当打开文件条目计数器递增时.我给你答案了; 如果您认为这是错误的,请将您自己的答案发布到您的问题中. (2认同)