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

ltt*_*ltt 8 c linux posix fork

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

glg*_*lgl 9

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

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


caf*_*caf 6

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

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