Неизвестная проблема с boost::process C++

180
29 мая 2018, 18:00

возникла проблема с использованием boost, использую пример по туториалу с двуноправленным контейнером, но он почему-то отказывается работать... Просто зацикливается в определенном месте и все на этом. Зациливание происходит перед завершением дочернего процесса, потому что данные в консоль не выводятся.

#include<boost/process/>
#include<iostream>
#include<string>
int main(int argc, char* argv[]) {
    boost::process::opstream in;
    boost::process::ipstream out;
    boost::process::child c("c++filt", boost::process::std_out > out, boost::process::std_in < in);
    in << "_ZN5boost7process8tutorialE";
    std::string value;
    out >> value;
    std::cout << value << std::endl;
    c.terminate(); 
    return EXIT_SUCCESS;
}

Но зато однонаправленные контейнеры работают прекрасно, вот также пример с туториала, он работает отлично:

#include <boost/process.hpp>
#include<iostream>
using namespace boost::process;
int main()
{
    ipstream pipe_stream;
    child c("gcc --version", std_out > pipe_stream);
    std::string line;
    while (pipe_stream && std::getline(pipe_stream, line) && !line.empty())
        std::cerr << line << std::endl;
    c.wait();
}

Я уже просто даже и не знаю в чем может быть причина... Использую бибилиотеку boost 1.65, вот пример подключения к проекту:

set (LIBRARIES -lboost_system -lboost_filesystem -lboost_regex -lboost_date_time)
add_executable(${PROJECT_NAME} ${SOURCES} ${HEADERS})
target_include_directories (${PROJECT_NAME} PRIVATE ${Boost_INCLUDE_DIR})
target_link_libraries (${PROJECT_NAME} ${LIBRARIES})

адеюсь, что кто-ниубдь поможет мне с этой проблемой, потому уже не знаю что и пробовать, заранее спасибо...

Answer 1
in << "_ZN5boost7process8tutorialE";

Здесь две ошибки:

  1. Отсутствует завершающий \n.
  2. Буфер потока не сбрасывается в трубу.

Само собой после этого и c++filt, и основной процесс висят неопределённо долго на чтение.

Обе ошибки решаются сбрасыванием в поток std::endl:

in << "_ZN5boost7process8tutorialE" << std::endl;
READ ALSO
Bool true или false [закрыт]

Bool true или false [закрыт]

Мне нужно сделать bool, который будет возвращать true, если (1 + (rand() % 101)) <= 50, в противном случае возвращать false

312
Как подключить библиотеку, скачанную с GitHub, в C++

Как подключить библиотеку, скачанную с GitHub, в C++

Как подключить библиотеку, скачанную с GitHub, в C++?

283
Метод не возвращает значение

Метод не возвращает значение

У Вас в коде функция возвращает ссылку Setr &

242