繁体   English   中英

使用C中的管道传递多个数据块

[英]Passing multiple chunks of data using pipe in C

我需要向子进程发送3个char缓冲区,我想将它们视为3个单独的数据块。 我曾考虑过使用read()write()系统调用,但是在读完man后,我看不到一种分离数据的方法-如果我理解正确,如果我在父进程中一个接一个地写了3个缓冲区,那么一个调用read()将读取所有数据。 当然,我可以在输入缓冲区中放置一些分隔符,例如'\\0' ,并在子级中分隔数据,但是我正在寻找一种更优雅的方法来实现。 那么,是否存在某种能够顺序传递数据的系统调用?

一种可能性是使用stdio.h已经给您的东西: fdopen()管道的两端,并使用FILE指针使用fgets() / fputs() 假设您的数据不包含换行符。

一些替代方法可能是使用具有read() / write()固定大小,或者使用其他定界符并使用strtok()解析接收到的数据。 您也可以先发送大小,以便孩子知道在下一个read()调用中要读取多少字节。 确实有很多选择。

如果有的话,可以使用O_DIRECT来获得“面向数据包的”管道 ,但是当然存在局限性。

一般来说,在我看来,具有分隔符的基于文本的流协议比较干净。

你有两个选择

  1. 在数据中放入定界符(如您在问题中所述)。
  2. 提供孩子的反馈。 换句话说,在将大量数据写入管道之后,父级等待子级的响应,例如在第二个管道上,或者使用信号量。

您可以在每个数据块之前加上一个标题,如果块可以是可变长度,则可以包含一个长度字段。 读取器可以读取标题,然后读取块内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM