我正在开发一个应用程序,我想将 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,并且在终端上不断地重新调整?