如何在我的C程序中运行另一个C程序?

如何在我的C程序中运行另一个C程序?,c,linux,command-line,system,C,Linux,Command Line,System,(所有在Linux上运行并通过命令行运行的程序)因此我希望能够从我自己的C程序中运行一个已编译的C程序,然后能够读取已编译的C程序的输出,并让我的C程序为该程序提供输入。(还假设我只有另一个C程序的编译版本)。我知道system()函数,但我不确定是否可以使用它来读取已编译程序的输出,然后提供我自己的输入。您可以像这样使用system(): system("executable arg1 ... > file.txt"); arg1…是可执行文件的参数列表file.txt是重定向到文件的

(所有在Linux上运行并通过命令行运行的程序)因此我希望能够从我自己的C程序中运行一个已编译的C程序,然后能够读取已编译的C程序的输出,并让我的C程序为该程序提供输入。(还假设我只有另一个C程序的编译版本)。我知道system()函数,但我不确定是否可以使用它来读取已编译程序的输出,然后提供我自己的输入。

您可以像这样使用
system()

system("executable arg1 ... > file.txt");
arg1…
是可执行文件的参数列表
file.txt
是重定向到文件的可执行文件的输出。此系统调用可以在分叉进程中进行。父程序可以等待它。如果需要,可以使用同步工具在文件
file.txt

上启用并发。您需要在两个程序之间设置一种机制。有几个选项可以实现这一点:

  • 共享内存/共享文件
  • 消息队列
  • 插座
  • 管道
关于您的问题,您没有给出很多背景信息,但从您的描述来看,这两个进程并行运行,并且多次交换数据。在这种情况下,您还必须考虑同步问题


可以找到一个有用的介绍。

fork
pipe
dup
exec
是您应该研究的函数。一个简单的解决方案是将被调用程序的输出重定向到一个文件,并在调用程序中处理该文件。请注意,如果您只需要单程执行,有
popen
。当您需要同时使用这两种方法时,没有简单的解决方案,但是要小心stdin和/或stdout上的大量数据导致的死锁。还要注意,有些程序访问终端,而不是stdin/stdout。
expect
程序可能对您有用。您错过了“让我的C程序为该程序提供输入”部分。@MaximeGroushkin这不是像在
system()
调用中将参数传递给可执行文件那样简单吗?我不知道,这是您的答案。但不是my-1。这种方法仅限于将输入传递给被调用的程序,然后检索其输出。然而,这个问题清楚地表明,被调用程序的输入必须在检索输出(“然后提供我自己的输入”)之后给出。OP似乎没有访问被调用程序的源代码的权限,只有可执行文件。在这种情况下,其中一些解决方案无法实现。