2013-03-19 38 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