Unix 内核使用三种数据结构表示打开的文件:Descriptor table
、File table
和v-node table
.
当一个进程打开一个文件两次时,它会在 . 中获得两个不同的描述符descriptor table
,file table
在v-node table
.
而子进程继承父进程的descriptor table
,所以内核descriptor table
为每个进程分别维护一个。但是来自不同进程的两个描述符指向open file table
.
所以
- 当子进程对文件进行一些读取时,同一个文件的偏移量在父进程中会改变吗?
- 如果 1 为真,对于两个进程,是否有一种方便的方法可以在同
fork
一个文件上获得相同的效果?这意味着两个进程在同一个文件上共享一个位置(偏移)信息。 - 有没有办法让两个进程都有完全不相关的表,就像两个不相关的进程只是他们打开了相同的文件。