据我所知,C管道就像一种特殊的文件,在内部,内核保存着表中每个进程的开口和关闭的轨迹。see the post here
因此,在这个意义上:
例如:进程1写入管道,进程2,3,4可以读取进程1所写的数据吗?
发布于 2021-09-25 10:30:55
是的,多个进程可以从一个管道读取(或写入)一个管道。
,但是数据不会复制到进程中。一旦数据被一个进程从管道中读取,数据就会丢失,并且只有实际读取数据的进程才能使用它。
相反,如果有多个进程写入单个管道,则无法区分数据或数据来源于哪个进程。
发布于 2021-09-25 10:37:34
连接
是。
吗?
不是的!
Unix (管道)不能以“单生产者、多用户”(spmc)的方式使用;这也适用于Unix域套接字(对于大多数实现来说,UDS和fifos是由完全相同的代码实现的,只有几个配置位在创建时有所不同)。写入管道/ SOCK_STREAM UDS (或写入SOCK_DGRAM unix域套接字的数据报)的每个字节只能从一个读取端读取。
然而,完全有可能的是拥有“多生产者,单一消费者”fifo,UDS,即具有打开一个读取端的消费者(同时保持打开写入端,但不使用它),多个生产者可以向单个用户发送数据。对于面向流的管道,没有严格的排序,所以发送的所有字节都会被混淆。但是对于SOCK_DGRAM,UDS套接字对消息边界是保留的。
1:有一个特别的缺陷,即如果创造过程不打开书写端的实例,任何一个制作者程序一旦关闭它们的一个书写端,就会拆除所有其他过程的连接。
https://stackoverflow.com/questions/69325220
复制相似问题