Я разрабатываю приложение, в котором я хочу перенаправить вывод (информацию о ходе выполнения) команды 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
завершена, очень следующая строка цикла выполняется.
если кто-нибудь знает, почему выход не возвращается в бафф, а он постоянно переустанавливается на терминале?