2010-10-22 80 views
1

雖然我嘗試以下方法:我怎麼能系統功能的輸出存儲爲一個字符串

system("ifconfig -a | grep inet | " 
      "sed 's/\\([ ]*[^ ]*\\)\\([ ]*[^ ]*\\).*$/\\1 \\2/' " 
      " > address.txt") ; 

我得到的輸出文件。我如何將輸出分配給一個變量。

+4

使用'popen',而不是'system',然後從標準輸入讀取到您的字符串 – 2010-10-22 15:18:51

+1

@保羅的R - 這是比我更好的主意,海事組織 – 2010-10-22 15:41:41

+0

@Steve:感謝 - 我將做它一個答案,但我對Windows不熟悉是否有'popen'。 – 2010-10-22 16:24:58

回答

1

編輯:在@Paul R的評論中推薦的最佳方法是使用_popen並從stdin中讀取命令輸出。該MSDN頁面上有示例代碼。

ORIGINAL省力:

一種選擇是創建一個使用tmpnam_s一個臨時文件,還有寫你的輸出,而不是硬編碼的文件名,然後讀取它從文件恢復到std::string,刪除臨時一旦你完成文件。根據MSDN的示例代碼:

#include <stdio.h> 
#include <stdlib.h> 
#include <fstream> 
#include <sstream> 

int main(void) 
{ 
    char name1[L_tmpnam_s]; 
    errno_t err; 

    err = tmpnam_s(name1, L_tmpnam_s); 
    if (err) 
    { 
     printf("Error occurred creating unique filename.\n"); 
     exit(1); 
    } 
    stringstream command; 
    command << "ifconfig -a | grep inet | " << 
      "sed 's/\\([ ]*[^ ]*\\)\\([ ]*[^ ]*\\).*$/\\1 \\2/' " << 
      " > " << (const char*)name1; 
    system(command.str().c_str()); 

    { 
    ifstream resultFile((const char*)name1); 
    string resultStr; 
    resultFile >> resultStr; 

    cout << resultStr; 
    } 
    ::remove(name1); 
} 

該代碼使用CRT比我平時會,但你似乎有您希望使用依賴於這一種方法。

相關問題