gpt4 book ai didi

c - 一个一个从子进程中读取数据

转载 作者:太空宇宙 更新时间:2023-11-04 03:44:24 25 4
gpt4 key购买 nike

我有一个代码创建了两个管道,用于写入和读取调用另一个程序的 2(至 4)个子进程的数据。这个程序的代码只是两个 printf,一个打印 - 另一个打印 Done 都到 stdout连接到父进程的读取管道。在父进程中,我使用

读取数据
read(pipes[i][1][0], buffer, sizeof(buffer)-1);

问题是,如果我将 buffer 的大小设置为 4(例如),read() 调用将读取 -Do这不是我想要的,因为之后我会再次调用 read()。如果大小为 2,则一切正常,因为我知道我将要读取的内容的大小,但在其余代码中我没有该信息。

我在子进程上的每个 printf() 之后尝试了 fflush(stdout) 但它不起作用。我认为这很容易解决,但我想不通,有没有办法逐一读取子进程制作的指纹?

最佳答案

明智的方法可能是使用换行符 '\n' 字符作为分隔符。

将缓冲区大小设置为您的确切消息大小是一个脆弱的 hack,因为一旦您添加具有不同长度的新消息,它就会崩溃。

通常,您希望通过面向流的连接(管道、流或 TCP 套接字)发送的任何内容都需要具有长度的消息 header 或分隔符,以便相当容易地解析。


如果您极度希望将每次写入都视为一条离散消息,您也可以使用数据报套接字,它的行为实际上是这样的。在这种情况下,您会寻找 AF_UNIX/SOCK_DGRAM 套接字对。

关于c - 一个一个从子进程中读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25991948/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com