首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单管是否可由多个工序连接及读取?

单管是否可由多个工序连接及读取?
EN

Stack Overflow用户
提问于 2021-09-25 10:22:50
回答 2查看 924关注 0票数 2

据我所知,C管道就像一种特殊的文件,在内部,内核保存着表中每个进程的开口和关闭的轨迹。see the post here

因此,在这个意义上:

  1. 是否可能由多个进程连接一个单管?如果有可能,多个进程可以读取相同的数据吗?
  2. (如果有可能的话),它们将读取相同的数据,还是读取数据“空”?

例如:进程1写入管道,进程2,3,4可以读取进程1所写的数据吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-25 10:30:55

是的,多个进程可以从一个管道读取(或写入)一个管道。

,但是数据不会复制到进程中。一旦数据被一个进程从管道中读取,数据就会丢失,并且只有实际读取数据的进程才能使用它。

相反,如果有多个进程写入单个管道,则无法区分数据或数据来源于哪个进程。

票数 5
EN

Stack Overflow用户

发布于 2021-09-25 10:37:34

  1. Is一根单管可由多个processes?

连接

是。

  1. If是可能的,多个进程能读取同一个data?

吗?

不是的!

Unix (管道)不能以“单生产者、多用户”(spmc)的方式使用;这也适用于Unix域套接字(对于大多数实现来说,UDS和fifos是由完全相同的代码实现的,只有几个配置位在创建时有所不同)。写入管道/ SOCK_STREAM UDS (或写入SOCK_DGRAM unix域套接字的数据报)的每个字节只能从一个读取端读取。

然而,完全有可能的是拥有“多生产者,单一消费者”fifo,UDS,即具有打开一个读取端的消费者(同时保持打开写入端,但不使用它),多个生产者可以向单个用户发送数据。对于面向流的管道,没有严格的排序,所以发送的所有字节都会被混淆。但是对于SOCK_DGRAM,UDS套接字对消息边界是保留的。

1:有一个特别的缺陷,即如果创造过程不打开书写端的实例,任何一个制作者程序一旦关闭它们的一个书写端,就会拆除所有其他过程的连接。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69325220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档