可以使用没有叉子的管道?

时间:2012-11-13 08:33:37

标签: c linux posix fork

我可以在两个进程之间使用管道而不使用fork并与例如socket共享文件描述符吗?我不需要另一种解决方案,我需要在两个没有分叉的进程之间进行管道连接。

2 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:6)

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

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