WiS*_*GaN 7 c unix linux file-io linux-kernel
Unix内核表示使用三个数据结构打开的文件:Descriptor table
,File table
,和v-node table
.
当一个进程打开一个文件两次时,它会在descriptor table
两个条目中得到两个不同的描述符file table
(因此它们在同一个文件中有不同的位置),并且它们都指向一个条目v-node table
.
并且子进程继承父进程descriptor table
,因此内核descriptor table
分别为每个进程维护一个进程.但是来自不同进程的两个描述符指向相同的条目open file table
.
所以
fork
一个文件上获得相同的效果?这意味着两个进程共享同一文件上的位置(偏移)信息.当子进程对文件进行一些读取时,同一文件的偏移是否会在父进程中发生变化?
是的,因为偏移量存储在系统范围的文件表中.您可以使用dup
或获得类似的效果dup2
.
如果1为真,对于两个进程,是否有一种方便的方法可以在同
fork
一个文件上获得相同的效果?这意味着两个进程共享同一文件上的位置(偏移)信息.
使用Unix域套接字有一种称为"传递文件描述符"的技术.寻找"辅助"数据sendmsg
.
有没有办法分叉,以便两个进程都有完全不相关的表,比如只有两个不相关的进程才能打开相同的文件.
您必须open
再次使用该文件才能实现此目的.虽然它没有做你想要的,你也应该寻找FD_CLOEXEC
旗帜.