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

标签 c++ c ubuntu terminal ubuntu-10.04

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

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

我正在使用 Ubuntu 10.04。

谢谢!

最佳答案

您的问题可能有些误导。

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


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

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

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

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

'Fork' 是启动单独进程的另一种方式,可以对启动进程的标准输入/输出进行一些控制,但同样,我认为它不是终端。


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

我用常规方式手动打开一个终端,并在终端

  • 发出命令“tty”找出设备名称,

  • 发出“cd”以将焦点设置到工作目录。

    dmoen@C5:~$ tty

    /开发/pts/1

    dmoen@C5:~$ cd 工作

    dmoen@C5:~/work$

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

我没有尝试(最近)启动终端(如 smrt28 所建议的),除了在 shell 中。我相信这会起作用,但我看不到终端命令(示例中的 ls)的输出将如何传送回您的程序。 popen 简单地传递一个文本流。

很久以前,我使用过一个叫做“pty”的设备,它像终端一样工作,但我不记得如何连接它。


有一组“exec”命令……请参阅 man exec。要将它们连接回您的程序,您可能会使用文件,或者可能会重定向 i/o。选择太多,无法在此处列出。


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

关于c++ - 打开终端并通过C编程执行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21392485/

相关文章:

C++ unordered_map初始化底层会发生什么

使用 afl-gcc 编译 - 未检测到仪器

linux - 我可以同时基于同一个镜像启动多个 Docker 容器吗?

node.js - Strapi:警告请求 API 时发生错误

python - 在 python 中安装 openexr 不起作用

c++ - 画线到QImage

c++ - "constexpr if"vs "if"优化 - 为什么需要 "constexpr"?

c++ - Ifstream 读取奇怪的行为

c - 下推自动机的结构问题

c - 排序列表,错误 "not respond"