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

execute and receive the output of mml command in c++

本文关键字:MML 命令 输出 c++ 执行      更新时间:2023-10-16

我有一个在solaris Unix中执行MML命令的接口,如下所示:

> eaw 0004
<RLTYP; 
BSC SYSTEM TYPE DATA
GSYSTYPE
GSM1800
END
<

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

我的想法是解析c++中的命令输出。我可以省去一些解析的逻辑。但是从如何在c++中执行命令开始呢?有什么预先定义好的方法来做这个吗?这应该类似于在c++中执行sql查询。但是我们使用其他库来执行sql查询。我也不想在两者之间运行shell脚本或创建临时文件。

我想要的是在c++中执行命令并获得输出,甚至在c++中也是如此。有人能告诉我正确的方向吗?

您有几个选择。从最容易和最简单到最难和最复杂的使用:

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

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

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