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ループブロックの次の行が実行されることです。

出力がバフに戻されず、端末で継続的に再調整される理由を誰かが知っている場合はどうなりますか?

4

1 に答える 1

3

出力は、おそらく標準出力ではなく標準エラーに書き込まれています。コマンド文字列の最後に「2>&1」を追加するだけで、出力が表示されます(先頭のスペースに注意してください)。

于 2010-12-22T10:51:22.363 に答える