当我运行此代码时,该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;
}
当我运行此代码时,该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。它尝试创建文件(因为它是只写的,并且您打算向其写入数据)。
如果您想写入 fifo,您将需要使用pipe
orasync_pipe
设施。