来自管道的固定大小记录的多个读者

时间:2017-08-19 08:43:37

标签: c posix ipc

如果你制作一个烟斗,你可以分叉一堆孩子(工人,比如说),并从管道中读取每一个。如果父进程将数据写入管道,则未指定哪个工作程序将获取它,并且如果每个工作程序一次读取1000个字节,并且父进程写入225然后写入430,那么它就是#39 ; s未指定哪个worker将获得多少字节。但是,我认为通过一些潜在的假设,它可能实际上可以在管道上安装多个读者吗?

1)固定大小的消息。工人只读一个固定大小的消息。服务器只写那个大小的消息。

2)工人被用作"池"做一个工人的工作,但并行阻止操作。因此,并非每个工作人员都需要(或应该)接收每条消息。他们希望根据可供他们等待的消息来拆分消息。

我制作了一个每个工人制作一个管子的东西,然后只是随意写入一根管子或另一根管子,挥舞着一只橡皮鸡,希望特定的工人不会碰巧陷入困境。长期的操作。但我无法从1个管道中读取它们,并且任何自由的工作人员都会阻止读取它,因此通过写入该管道来按需唤醒它?

1 个答案:

答案 0 :(得分:0)

write()返回实际写入的字节数。想象一下,你的管道有一个系统提供的1 MB缓冲区,你写的10个字节少于1 MB。下次尝试写入1000个字节时,只能写入10个字节。怎么办?第一个尝试的读者将获得这10个字节,但无法确保没有其他人“窃取”其余信息。

您应该考虑使用面向消息的API,例如SysV或POSIX消息队列:System V IPC vs POSIX IPC

相关问题