命名管道类似于“mkfifo”创建,但双向

Posted

技术标签:

【中文标题】命名管道类似于“mkfifo”创建,但双向【英文标题】:Named pipe similar to "mkfifo" creation, but bidirectional 【发布时间】:2010-11-24 10:22:20 【问题描述】:

我想创建一个命名管道,就像“mkfifo”创建的那样,但有一点需要注意。我希望管道是双向的。也就是说,我希望进程 A 写入 fifo,进程 B 从中读取,反之亦然。由“mkfifo”创建的管道允许进程 A 读取其写入管道的数据。通常我会使用两个管道,但我试图模拟一个实际的设备,所以我希望 open()、read()、write() 等的语义尽可能与实际设备相似。任何人都知道无需借助两个管道或命名套接字即可完成此任务的技术吗?

【问题讨论】:

【参考方案1】:

pty(“伪终端接口”)。 man pty.

【讨论】:

一个 pty 带有一堆你不想要的东西 - 通常。像所有终端纪律处理一样。但提及它是在跳出框框思考。【参考方案2】:

使用 Unix 域套接字。

哦,你说你不想使用唯一可用的解决方案 - Unix 域套接字。

在这种情况下,您只能打开两个命名管道,或者不这样做。当然,或者为他们编写你自己的设备驱动程序——无论如何,你可以为开源系统做这件事;对于闭源系统(Windows、AIX、HP-UX)来说可能会更难。

【讨论】:

以上是关于命名管道类似于“mkfifo”创建,但双向的主要内容,如果未能解决你的问题,请参考以下文章

有名管道通讯编程

创建双向管道或任何类似行为的 Unix 方式?

我需要刷新命名管道吗?

说解在shell中通过mkfifo创建命名管道来控制多个进程并发执行

linux命令命名管道(mkfifo)+ 结合xargs命令使用

linux命令命名管道(mkfifo)+ 结合xargs命令使用