2

在 C 程序 (p1) 中,如何启动从 p1 的标准输出读取其标准输入的动态构造命令(及其参数)?

注意:

  1. 除了这个 stdout --> stdin 管道之外的方法也可以,只要 它在 Windows 和 Linux 上是可移植的。

  2. 我不能在这里使用 C++、Java、Perl、Ruby、Python 等。

此外,这是否会对其 Windows 构建有 MinGW 依赖项?

REOPENED:下面的问题为 Linux 提供了答案,但这个问题需要一种可移植的方法。 从 C 程序中执行程序

4

4 回答 4

4

Microsoft C 运行时调用它_popen而不是popen,但它似乎在 Windows(用于控制台应用程序)和 Linux 中具有相同的功能。

于 2008-10-23T15:07:10.173 回答
2

老实说,我并不是 100% 清楚你想要达到的目标。

但据我了解,您可以看看Boost.Process

你可以做类似的事情

 bp::child cs = p.start();
 bp::postream& os = cs.get_stdin();

然后将os用作任何流来将内容转储到子进程的标准输入中。

无论如何,使用库 wrt 管道重定向和链接可以实现很多目标。

于 2008-10-23T13:52:18.780 回答
1

链接的分析器(您拒绝)指的是 POSIX 管道。POSIX 是 C 的扩展,它添加了标准 C 中缺少的功能。POSIX 管道是此类功能的一个很好的例子:它们被添加到 POSIX 是因为标准 C 没有该功能。

于 2008-10-23T14:53:02.230 回答
1

glib 库是用 C 编写的,其实现在 Linux 和 Windows 上都经过了很好的测试。 有关生成新进程的手册部分将为您提供有关如何使用g_spawn_async_with_pipes调用启动新进程并挂钩其标准输入和标准输出句柄的信息。

于 2008-10-23T16:00:54.903 回答