为什么unix域套接字可用于将fd从child转移到父亲?

时间:2017-09-30 08:20:16

标签: sockets unix process between

我知道如果一个unix进程分叉,子进程可以使用来自父亲的fd。这是继承:但反之亦然。

虽然unix高级编程材料说如果我们使用unix域套接字,不仅我们可以将fd从child传输到父,也可以在进程之间传输。

这很奇怪:

  

fd只在一个过程中有意义,在不同的过程中,相同的fd值可能意味着非常不同。

     

然后unix域套接字怎么能真正在进程之间传输fds?我的意思是整数(4个字节)可以通过任何方式传输,但似乎没有一个进程可以操作另一个进程的fd?

有任何解释吗?

1 个答案:

答案 0 :(得分:3)

您应该真正尝试一下。如unix(7)手册页中所述:

SCM_RIGHTS Send or receive a set of open file descriptors from another process. The data portion contains an integer array of the file descriptors. The passed file descriptors behave as though they have been created with dup(2).

这意味着接收到的fds不等于按数字发送的fds,它们就像是新创建的fds,但是从内核的角度来看,它们实际上是同一回事。