我目前正在使用"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。如果第二个选项更容易,那么如何检查管道中进程输出的大小?
答案 0 :(得分:1)
条件实际上是read
电话的回复:
while (read(...) == 1) { ... }
也不要忘记address-of运算符,你可以使用它而不是将temp
声明为数组:
char temp;
while (read(pipe[0], &temp, sizeof(temp)) == sizeof(temp)) { ... }