Когда я запускаю этот код, boost::process::std_out > "myfifo"
линия не возвращается, потому что она ждет на open
призываем вернуться, чего не происходит, потому что «myfifo» — это fifo. Это ошибка?
#include <boost/process.hpp>
int main(int, char**)
{
mkfifo("myfifo", 0600);
auto x = boost::process::std_out > "myfifo";
return 0;
}
Это интересно, потому что поведение используемого вами кода не определено.
Ключевые слова параметра — это, по сути, «DSL», который строит свойства расширения, которые будут использоваться исполнителем.
Несмотря на то, что детали реализации шаблонных выражений не определены, можно ожидать, что объекты с одиночным параметром не будут иметь видимых побочных эффектов.
Это делает ваш наблюдаемый зависание замечательным. Я думаю, что это слабый дизайн, когда простая композиция выражений аргументов имеет побочные эффекты (даже на разрушение, между прочим). Было бы намного лучше, если бы действия выполнялись только во время выполнения процесса, ИМХО.
Вы можете сообщить об этом разработчикам библиотеки (хотя они, вероятно, скажут «не делайте этого» и отметят это как «намеренно»).
по факту bp::std_out > "filename"
, не пытается открыть Фио. Пытается Создайте файл (поскольку он предназначен только для записи, и вы намереваетесь записать в него данные).
Если вы хотите написать в fifo, вы захотите использовать pipe
или же async_pipe
объекты.
Других решений пока нет …