дочерний элемент boost :: process завершается до того, как все stdout могут быть прочитаны - PullRequest
0 голосов
/ 08 ноября 2018

Я хочу использовать boost-process для чтения стандартного вывода из команды:

std::string command = "cat /tmp/my_file";

namespace bp = boost::process;
bp::ipstream is;
bp::child c(command, bp::std_out > is);

std::string line;

int no_lines = 0;
while (c.running() && std::getline(is, line) && !line.empty()) {
    ++no_lines;
}
c.wait();

std::cout << "line count: " << no_lines << "\n";

Это почти идентично учебному пособию по процессу повышения .

Для тестирования «команда» просто выводит текстовый файл, содержащий 10000 строк.

Проблема в том, что мой код не читает все выходные данные команды (в тестовом случае он читает только около 9700 строк).

Что я делаю не так?

Кажется, что дочерний процесс завершается до того, как весь stdout будет прочитан.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...