使用 Linux 和 C++,我想要一个执行以下操作的函数:
string f(string s)
{
string r = system("foo < s");
return r;
}
显然上述方法不起作用,但你明白了。我有一个字符串 s
我想作为应用程序“foo”的子进程执行的标准输入传递,然后我想将其标准输出记录到字符串 r
然后归还。
我应该使用哪种 Linux 系统调用或 POSIX 函数组合?我使用的是 Linux 3.0,不需要该解决方案来处理旧系统。
原文由 Andrew Tomazos 发布,翻译遵循 CC BY-SA 4.0 许可协议
由 erpini 提供的代码不能像所写的那样工作。请注意,例如,在父级中关闭的管道末端将在以后使用。看着
以及随后对该封闭描述符的写入。这只是换位,但它表明这个代码从未被使用过。下面是我测试过的版本。不幸的是,我改变了代码风格,所以这没有被接受为对 erpini 代码的编辑。
唯一的结构变化是我只重定向子路径中的 I/O(注意 dup2 调用仅在子路径中。)这非常重要,因为否则父级的 I/O 会搞砸。感谢 erpini 最初的答案,我在开发这个答案时使用了它。