2010-12-22 134 views
1

我正在開發一個應用程序,在該應用程序中,我想將dd命令的輸出(進度信息)重定向到我的C++程序,但實際上並未獲取輸出,這裏是代碼使用管道讀取dd命令的輸出問題

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,並且它在終端上不斷重新調整?

回答

3

輸出可能正在寫入標準錯誤而非標準輸出。只需將「2> & 1」添加到命令字符串的最後,您應該看到輸出(注意前導空格)。

+0

感謝您的建議,嘗試了這一點,但仍然是相同的結果.. – 2010-12-22 10:59:51