1

我正在开发一个应用程序,我想将 dd 命令的输出(进度信息)重定向到我的 C++ 程序,但实际上并没有得到输出,这里是代码

FILE * progressInfo = popen("gzip -dc backup/backup.img.gz | pv -ptrbe -i 2 -s 2339876653 | dd of=/dev/sdb","r");
if(!progressInfo)
{
return -1;
}
char buf[1024];
while(fgets(buff, sizeof(buff),progressInfo)!=NULL)
{
    std::cout << buff << endl;
}

但问题是没有收到进度信息buff,输出不断打印在终端上,上面的程序暂停while(fgets(buff, sizeof(buff),progressInfo)!=NULL),一旦dd操作完成,就执行循环块的下一行。

如果有人知道为什么输出没有返回到buff,并且在终端上不断地重新调整?

4

1 回答 1

3

输出可能被写入标准错误而不是标准输出。只需将“ 2>&1”添加到命令字符串的最后,您应该会看到输出(注意前导空格)。

于 2010-12-22T10:51:22.363 回答