我是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”存储在一个文件中。请帮助。
答案 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