9

我可以在两个进程之间使用管道而不使用 fork 并与例如 socket 共享文件描述符吗?我不需要其他解决方案,我需要两个未分叉的进程之间的管道。

4

2 回答 2

9

您可以使用命名管道(FIFO):

如果你这样做mkfifo <common path>,你可以在两个进程中使用这个路径,一个用于读取,一个用于写入。然后您的行为与普通管道相同。

于 2012-11-13T08:43:54.630 回答
7

最简单的解决方案是使用命名管道,它是在文件系统中具有名称的管道,以便两个进程都可以引用它。通过mkfifo()调用创建命名管道,并打开命名管道open()(一个进程应该打开它以进行读取,而另一个用于写入)。

也可以将匿名管道与两个不相关的进程一起使用,但要这样做,您需要以某种方式将创建管道的进程中的打开文件描述传递给另一个进程。您可以通过SCM_RIGHTS在 UNIX 域套接字上使用消息来做到这一点,但如果您有一个 UNIX 域套接字,那么您可以使用它而不是管道来进行通信。Linux 特定的方法是让第二个进程在第一个进程中表示管道末端open()/proc/<pid>/fd/<fd>符号链接上使用,但这是非常巴洛克式的。

于 2012-11-13T09:52:38.587 回答