C 来自不同进程的两个文件描述符指向打开的文件表中的同一条目

C 来自不同进程的两个文件描述符指向打开的文件表中的同一条目,c,linux,unix,file-io,linux-kernel,C,Linux,Unix,File Io,Linux Kernel,Unix内核使用三种数据结构表示打开的文件:描述符表,文件表,以及v节点表 当一个进程打开一个文件两次时,它在描述符表中得到两个不同的描述符,在文件表中得到两个条目(以便它们在同一文件中有不同的位置),并且它们都指向v节点表中的一个条目 子进程继承父进程的描述符表,所以内核分别为每个进程维护一个描述符表。但来自不同进程的两个描述符指向打开文件表中的同一条目 所以 当子进程读取文件时,父进程中同一文件的偏移量会发生变化吗 如果1为真,对于两个进程,是否有一种方便的方法可以在同一文件上获得与fork

Unix内核使用三种数据结构表示打开的文件:
描述符表
文件表
,以及
v节点表

当一个进程打开一个文件两次时,它在
描述符表
中得到两个不同的描述符,在
文件表
中得到两个条目(以便它们在同一文件中有不同的位置),并且它们都指向
v节点表
中的一个条目
子进程继承父进程的
描述符表
,所以内核分别为每个进程维护一个
描述符表
。但来自不同进程的两个描述符指向
打开文件表中的同一条目
所以

  • 当子进程读取文件时,父进程中同一文件的偏移量会发生变化吗
  • 如果1为真,对于两个进程,是否有一种方便的方法可以在同一文件上获得与
    fork
    相同的效果?这意味着两个进程在同一个文件上共享一个位置(偏移)信息
  • 有没有一种方法可以分叉,使两个进程都有完全不相关的表,就像两个不相关的进程只打开相同的文件一样
  • 当子进程读取文件时,父进程中同一文件的偏移量会发生变化吗

    是,因为偏移量存储在系统范围的文件表中。使用
    dup
    dup2
    可以获得类似的效果

    如果1为真,对于两个进程,是否有一种方便的方法可以在同一文件上获得与
    fork
    相同的效果?这意味着两个进程在同一个文件上共享一个位置(偏移)信息

    使用Unix域套接字有一种称为“传递文件描述符”的技术。在中查找“辅助”数据

    有没有一种方法可以分叉,使两个进程都有完全不相关的表,就像两个不相关的进程只打开相同的文件一样

    您必须再次
    打开该文件才能实现此目的。尽管它不能满足您的需要,但您也应该查找
    FD\u CLOEXEC
    标志