如何使bash程序接受来自另一个C程序的命令

时间:2014-06-18 00:39:41

标签: linux bash command-line-interface

我是linux和编程的新手。我使用 system(“Prog”);

从C程序中打开了一个应用程序
Prog-> #after opening the program

此“Prog”接受来自用户的某些命令并显示输出。

Prog-> write # Accepts the command from user
1 2 3 4 5    # Displays the output 
Prog->       # Waiting for next command

我想从C程序发出命令而不是从用户那里获取命令。我不能用system(“”);将命令发送到打开的程序“Prog”(如从C程序向CLI传递命令)。系统();仅适用于CLI而不适用于已打开的程序。

有什么方法可以将命令从C程序发送到已打开的应用程序?

我还应该将显示的输出“1 2 3 4 5”存储在一个文件中。请帮助。

3 个答案:

答案 0 :(得分:2)

从表面上看,您可能会发现popen()功能适用于 pclose()功能。

FILE *fp = popen("Prog", "w");

这表示您的程序将写入fp以将数据发送到Prog的标准输入。 Prog的标准输出将与程序的标准输出位于同一位置。完成后,请使用pclose()

关闭该流
pclose(fp);

如果您需要更多地控制输出的位置,则需要使用:

如果这还不够 - 如果Prog对没有输入和/或输出终端的反应不好 - 那么您需要调查伪ttys或pty设备。这些使用起来有点棘手;他们是一个单独问题的主题(并且可能有几个相关问题,答案已经在SO上提供,以涵盖他们的使用)。

答案 1 :(得分:1)

您可以通过使用fork()exec()execv()execvp()等重定向来实现此目的。这会创建一个单独的流程,(这是标准方法,这样做,而不是使用system),但它允许您重定向该过程的I / O然后您喜欢,类似于bash的做法。看看:

http://publicabstractvoid.blogspot.com/2008/01/forkexec-while-redirecting-io.html

查看dup2(2)和fork(2)联机帮助页。

答案 2 :(得分:0)

如果你的" Prog"从标准输入读取命令,您可以将命令从C程序传送到" Prog"。此外,您可以在C程序中捕获" Prog"到stdout和stderr流。可以在此处找到如何执行此操作的一个示例:Linux 3.0: Executing child process with piped stdin/stdout