gpt4 book ai didi

c++ - boost::process::std_out 没有返回,因为它试图打开一个 fifo

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:18:17 26 4
gpt4 key购买 nike

当我运行这段代码时,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,你需要使用 pipeasync_pipe 工具。

关于c++ - boost::process::std_out 没有返回,因为它试图打开一个 fifo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47822628/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com