[英]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
来获得“面向数据包的”管道 ,但是当然存在局限性。
一般来说,在我看来,具有分隔符的基于文本的流协议比较干净。
你有两个选择
您可以在每个数据块之前加上一个标题,如果块可以是可变长度,则可以包含一个长度字段。 读取器可以读取标题,然后读取块内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.