2013-03-19 57 views
0

接收MML命令i的输出具有其中i使用在我的solaris UNIX执行MML命令像下面的接口:执行和在C++

> eaw 0004 
<RLTYP; 
BSC SYSTEM TYPE DATA 

GSYSTYPE 
GSM1800 

END 
< 

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

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

我想要的是在C++中执行命令并获取输出,甚至在C++中。 有没有人能给我正确的方向?

回答

1

你有几种选择。从最简单,简单到最困难,最复杂的使用方法:

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

@ adam.Thanks您的建议。请给我一个小例子.lets说使用上述建议在C++内执行sql查询。 – user1939168 2013-03-19 07:32:49

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; 
} 
+0

这就像执行一个shell命令。我不能启动一个接口,并通过this.also执行命令,它创建了一个文件“out”,我已经提到过我不希望这样做。 – user1939168 2013-03-19 07:31:38