打开终端并通过C编程执行命令

问题描述 投票:1回答:2

有人知道如何使用C程序打开终端并执行多个命令吗?

我有一个C程序和终端执行的另一组命令。我需要将它们合并到C中的一个程序中。

我正在使用Ubuntu 10.04。

谢谢!

c++ c ubuntu terminal ubuntu-10.04
2个回答
0
投票

检查“man xterm”,参数-e。然后,在C中,您可以:

system(“xterm -e ls”)


3
投票

你的问题可能有些误导。

因为您想要在c代码中运行所有终端命令,所以实际上您可能只有这些命令的文本输入/输出。如果是这样,您可能不需要终端。


当(终端)程序的输出是文本流时,我使用popen。它可能是最容易使用的。举个例子:

 ...
 const char* cmndStr = "ls -lsa";
 FILE* pipe = popen(cmndStr, "r");
 ...

popen指令在cmndStr中执行命令,并且写入命令(ls -lsa)标准输出的任何文本都被重定向到管道,然后管道可供您读取。

popen打开一个单独的进程(但没有终端工作,只有管道)

'Fork'是另一种启动单独进程的方法,可以控制已启动进程的std i / o,但同样,我认为不是终端。


另一方面,如果您的输出不是简单的文本流,也许您可​​以使用仅输出专用终端屏幕来适应特殊输出活动。例如,当我使用ncurses时:

我以常规方式手动打开终端,并在终端中

  • 发出命令“tty”以找出设备名称,和
  • 发出“cd”将焦点设置为工作目录。 dmoen @ C5:〜$ tty 的/ dev / PTS / 1 dmoen @ C5:〜$ cd work dmoen @ C5:〜/ $工作

然后我启动我的程序(在不同的tty中),让程序知道我想要它用于特殊输出的设备(即/ dev / pts / 1)...我通常使用命令行参数来告诉我的程序我希望它使用哪些pts或额外终端,但存在环境变量,管道,输入/输出重定向和其他选择。

我没有尝试(最近)启动终端(如smrt28所建议),除了在shell中。我相信这会有效,但我不知道终端命令(示例中的ls)的输出是如何传递回程序的。 popen平凡地传递文本流。

很久以前,我使用了一个名为'pty'的设备,它像终端一样工作,但我不记得如何有用地连接它。


有一组'exec'命令...见man exec。要将它们连接回程序,您可能会使用文件,或者重定向i / o。列出的选项太多了。


而且,也许你可以使用shell管道将这些命令与你的c程序连接起来。

© www.soinside.com 2019 - 2024. All rights reserved.