boost :: process :: std_out не возвращается, потому что пытается открыть fifo

Когда я запускаю этот код, 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;
}

1

Решение

Это интересно, потому что поведение используемого вами кода не определено.

Прежде всего

Ключевые слова параметра — это, по сути, «DSL», который строит свойства расширения, которые будут использоваться исполнителем.

Несмотря на то, что детали реализации шаблонных выражений не определены, можно ожидать, что объекты с одиночным параметром не будут иметь видимых побочных эффектов.

Это делает ваш наблюдаемый зависание замечательным. Я думаю, что это слабый дизайн, когда простая композиция выражений аргументов имеет побочные эффекты (даже на разрушение, между прочим). Было бы намного лучше, если бы действия выполнялись только во время выполнения процесса, ИМХО.

Вы можете сообщить об этом разработчикам библиотеки (хотя они, вероятно, скажут «не делайте этого» и отметят это как «намеренно»).

Во-вторых, ваши ожидания не верны

по факту bp::std_out > "filename", не пытается открыть Фио. Пытается Создайте файл (поскольку он предназначен только для записи, и вы намереваетесь записать в него данные).

Если вы хотите написать в fifo, вы захотите использовать pipe или же async_pipe объекты.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector