Linux 中的双向管道
Two way pipe in Linux
因此,如果我在 gcc stdio.h 中使用 popen(),我可以将 parent 的标准输出通过管道传输到它的 child 的标准输入,或者我可以通过管道传输 child 的标准输出到 parent 的标准输入。我想同时做这两件事。有没有办法使用 popen 来完成这项工作,或者我是否需要使用较低级别的工具(如共享内存)来完成这项工作?
注意:在 FreeBSD 中,popen 似乎可以与 read-write 和 "r+" 一起使用。我不明白 child 的标准输出是如何通过管道传输到 parent 和 parent 的标准输出的。无论如何,这可能对我有用,但在 Linux 中似乎并非如此。如果我在这一点上弄错了,那将回答我的问题。这是我收到此注释的 link:https://www.freebsd.org/cgi/man.cgi?query=popen&sektion=3
注意 2:我更喜欢按优先级顺序在几乎所有 Linux 发行版、FreeBSD 和 OSX 中移植的解决方案。话虽如此,我很乐意至少让它在 Ubuntu 14.04.
中运行
你完全正确。
一些环境支持带有双向管道的 "enhanced" popen() - 但它不是 "standard"。
如果你想移植到所有版本的 'nix(Linux、BSD、OSX 等),你应该使用 "pipe/fork/dup2":
popen simultaneous read and write
因此,如果我在 gcc stdio.h 中使用 popen(),我可以将 parent 的标准输出通过管道传输到它的 child 的标准输入,或者我可以通过管道传输 child 的标准输出到 parent 的标准输入。我想同时做这两件事。有没有办法使用 popen 来完成这项工作,或者我是否需要使用较低级别的工具(如共享内存)来完成这项工作?
注意:在 FreeBSD 中,popen 似乎可以与 read-write 和 "r+" 一起使用。我不明白 child 的标准输出是如何通过管道传输到 parent 和 parent 的标准输出的。无论如何,这可能对我有用,但在 Linux 中似乎并非如此。如果我在这一点上弄错了,那将回答我的问题。这是我收到此注释的 link:https://www.freebsd.org/cgi/man.cgi?query=popen&sektion=3
注意 2:我更喜欢按优先级顺序在几乎所有 Linux 发行版、FreeBSD 和 OSX 中移植的解决方案。话虽如此,我很乐意至少让它在 Ubuntu 14.04.
中运行你完全正确。
一些环境支持带有双向管道的 "enhanced" popen() - 但它不是 "standard"。
如果你想移植到所有版本的 'nix(Linux、BSD、OSX 等),你应该使用 "pipe/fork/dup2":
popen simultaneous read and write