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

时间:2014-01-27 21:52:37

标签: c++ c ubuntu terminal ubuntu-10.04

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

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

我正在使用Ubuntu 10.04。

谢谢!

2 个答案:

答案 0 :(得分: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程序连接。

答案 1 :(得分:0)

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

system(“xterm -e ls”)