在c ++中执行并接收mml命令的输出

时间:2013-03-19 06:33:35

标签: c++ c parsing

我有一个界面,用于在我的solaris unix中执行mml命令,如下所示:

> eaw 0004
<RLTYP; 
BSC SYSTEM TYPE DATA

GSYSTYPE
GSM1800

END
<

我在命令行执行eaw <name>。它将启动一个接口,我可以在其中执行mml命令,我可以看到执行这些命令的输出。

我的想法是用c ++解析命令输出。 我可以取消一些解析逻辑。但是要开始如何在c ++中执行命令?有没有任何预定义的方法来做到这一点。 这应该类似于在c ++中执行sql查询。但我们使用其他库来执行sql查询。我也不想运行shell脚本或在其间创建临时文件。

我想要的是在c ++中执行命令并获得输出,甚至是在c ++中。 任何人都可以给我正确的指示吗?

2 个答案:

答案 0 :(得分:1)

您有几种选择。从最简单,最简单到最难和最复杂的使用:

  • 使用system()调用生成shell来运行命令
  • 使用popen()调用生成子进程并写入其标准输入流或从其标准输出流中读取(但不能同时读取)
  • 使用pipe()fork()dup()/dup2()exec*()的组合生成子进程,并为子进程的标准输入和输出设置管道。< / LI>

答案 1 :(得分:0)

以下代码使用sh命令完成。这会将stdout重定向到名为“out”的文件,稍后可以读取该文件以处理输出。可以通过管道写入进程的每个命令。

#include <stdio.h>
int main()
{
        FILE *fp;
        fp = popen("sh > out", "w");
        if (fp) {
                fprintf(fp, "date\n");
                fprintf(fp, "exit\n");
                fclose(fp);
        }
        return 0;
}