проблема при чтении вывода команды dd с использованием канала - PullRequest
1 голос
/ 22 декабря 2010

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

если кто-нибудь знает, почему выход не возвращается в бафф, а он постоянно переустанавливается на терминале?

1 Ответ

3 голосов
/ 22 декабря 2010

Вывод, вероятно, записывается со стандартной ошибкой, а не со стандартным выводом.Просто добавьте «2> & 1» в самый конец командной строки, и вы должны увидеть результат (обратите внимание на начальный пробел).

...