boost :: process :: std_out不会返回,因为它正在尝试打开fifo

时间:2017-12-14 21:51:06

标签: c++ linux boost boost-process

当我运行此代码时,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 个答案:

答案 0 :(得分:0)

这很有趣,因为你使用的代码的行为是未定义的。

首先关闭

参数关键字实际上是&#34; DSL&#34;构建执行程序使用的扩展属性。

尽管未指定模板表达式的实现细节,但人们会期望单个参数对象没有可观察到的副作用。

这使你观察到的悬念显着。我认为,当论证表达式的单纯构成具有副作用时(即使在销毁时,也是如此),它是一种弱设计。如果行动只在流程执行时运行,那么会好得多,恕我直言。

您可以向图书馆开发人员报告此问题(尽管他们可能会说&#34;不要这样做&#34;并将其标记为&#34;按设计&#34;)。< / p>

其次,你的期望是错的

实际上bp::std_out > "filename",不会尝试打开 fifo。它试图创建文件(因为它是只写的,你打算向它写入数据)。

如果您想写入fifo,则需要使用pipeasync_pipe设施。