Я хочу запустить два процесса из моего приложения на C ++ и передать данные в первый процесс, а вывод первого - во второй. Я выбрал Boost.Process, который, кажется, предлагает простой интерфейс для достижения этой цели.
В качестве минимального примера, давайте предположим, что я хочу реализовать то, что будет echo "Hello, world!" | cat | cat
в bash.
Мой код:
#include <boost/process.hpp>
#include <string>
namespace bp = boost::process;
int
main( )
{
const std::string content = "Hello, world!\n";
bp::pipe pipe1;
bp::pipe pipe2;
bp::child child1( bp::search_path( "cat" ), ( bp::std_in < pipe1 ), ( bp::std_out > pipe2 ) );
bp::child child2( bp::search_path( "cat" ), ( bp::std_in < pipe2 ) );
pipe1.write( &content[ 0 ], content.size( ) );
pipe1.close( );
child1.wait( ); // this call never finishes
child2.wait( );
return 0;
}
Данные, кажется, переданы правильно, и я вижу "Привет, мир!" в терминале. Тем не менее, программа никогда не завершается, поскольку вызов child1.wait( )
никогда не возвращается.
Это на Linux (Ubuntu 19.10) с использованием boost 1.69.
Что я делаю неправильно? Спасибо за любую помощь!