逐个字符地从管道读入缓冲区/在管道中查找数据的大小

时间:2014-04-12 14:21:26

标签: c++ operating-system pipe

我目前正在使用"unistd.h""sys/wait.h"管道作为我的操作系统作业。我试图实现图形管道。

由于在图形管道中,有可能将进程的输出作为输入发送到多个进程,我需要将其存储在缓冲区中并从循环中发送。

要读取进程的输出,我使用read()函数。问题是,由于输出中的字符数是可变的,要么我需要逐个读取一个字符,要么以某种方式找到输出的大小。

我试图做第一个选项。这是我的代码

string buffer;
char temp[1];
while (/*condition*/)
{
    read (pipe[0], temp, 1);
    buffer.push_back (temp[0]);
}

我的问题是循环中必须包含的条件是什么?

P.S。如果第二个选项更容易,那么如何检查管道中进程输出的大小?

1 个答案:

答案 0 :(得分:1)

条件实际上是read电话的回复:

while (read(...) == 1) { ... }

也不要忘记address-of运算符,你可以使用它而不是将temp声明为数组:

char temp;
while (read(pipe[0], &temp, sizeof(temp)) == sizeof(temp)) { ... }