因此,如果我在gcc stdio.h中使用popen(),我可以将父母的标准输出管道传递给它的孩子的标准输出,或者我可以将孩子的标准输出管道输送给父母& #st; s stdin。我想同时做两件事。有没有办法使用popen,或者我需要使用较低级别的工具(如共享内存)来完成这项工作吗?
注意:在FreeBSD中看起来popen可以用" r +"进行读写。我不明白孩子的标准输出是如何通过管道输送到父母和父母的标准输出。不管怎么说,这可能对我有用,但在Linux中似乎并非如此。如果我在这一点上弄错了,那就会回答我的问题。以下是我收到此备注的链接:https://www.freebsd.org/cgi/man.cgi?query=popen&sektion=3
注意2:我更喜欢按照优先级顺序在几乎所有Linux发行版,FreeBSD和OSX上移植的解决方案。话虽这么说,我很乐意至少让它在Ubuntu 14.04中运行。
答案 0 :(得分:5)
你绝对正确。
某些环境支持"增强型" popen()带有双向管道 - 但它没有"标准"。
如果你想要移植到所有版本的&#n; nix(Linux,BSD,OSX等),你应该使用" pipe / fork / dup2":