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旗帜.