有人知道如何使用C程序打开终端并执行多个命令吗?
我有一个C程序和终端执行的另一组命令。我需要将它们组合成一个C程序。
我正在使用Ubuntu 10.04。
谢谢!
答案 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”)