C 来自不同进程的两个文件描述符指向打开的文件表中的同一条目
Unix内核使用三种数据结构表示打开的文件:C 来自不同进程的两个文件描述符指向打开的文件表中的同一条目,c,linux,unix,file-io,linux-kernel,C,Linux,Unix,File Io,Linux Kernel,Unix内核使用三种数据结构表示打开的文件:描述符表,文件表,以及v节点表 当一个进程打开一个文件两次时,它在描述符表中得到两个不同的描述符,在文件表中得到两个条目(以便它们在同一文件中有不同的位置),并且它们都指向v节点表中的一个条目 子进程继承父进程的描述符表,所以内核分别为每个进程维护一个描述符表。但来自不同进程的两个描述符指向打开文件表中的同一条目 所以 当子进程读取文件时,父进程中同一文件的偏移量会发生变化吗 如果1为真,对于两个进程,是否有一种方便的方法可以在同一文件上获得与fork
描述符表
,文件表
,以及v节点表
当一个进程打开一个文件两次时,它在
描述符表
中得到两个不同的描述符,在文件表
中得到两个条目(以便它们在同一文件中有不同的位置),并且它们都指向v节点表
中的一个条目子进程继承父进程的
描述符表
,所以内核分别为每个进程维护一个描述符表
。但来自不同进程的两个描述符指向打开文件表中的同一条目
所以
当子进程读取文件时,父进程中同一文件的偏移量会发生变化吗
如果1为真,对于两个进程,是否有一种方便的方法可以在同一文件上获得与fork
相同的效果?这意味着两个进程在同一个文件上共享一个位置(偏移)信息
有没有一种方法可以分叉,使两个进程都有完全不相关的表,就像两个不相关的进程只打开相同的文件一样
当子进程读取文件时,父进程中同一文件的偏移量会发生变化吗
是,因为偏移量存储在系统范围的文件表中。使用dup
或dup2
可以获得类似的效果
如果1为真,对于两个进程,是否有一种方便的方法可以在同一文件上获得与fork
相同的效果?这意味着两个进程在同一个文件上共享一个位置(偏移)信息
使用Unix域套接字有一种称为“传递文件描述符”的技术。在中查找“辅助”数据
有没有一种方法可以分叉,使两个进程都有完全不相关的表,就像两个不相关的进程只打开相同的文件一样
您必须再次打开该文件才能实现此目的。尽管它不能满足您的需要,但您也应该查找FD\u CLOEXEC
标志