1
雖然我嘗試以下方法:我怎麼能系統功能的輸出存儲爲一個字符串
system("ifconfig -a | grep inet | "
"sed 's/\\([ ]*[^ ]*\\)\\([ ]*[^ ]*\\).*$/\\1 \\2/' "
" > address.txt") ;
我得到的輸出文件。我如何將輸出分配給一個變量。
雖然我嘗試以下方法:我怎麼能系統功能的輸出存儲爲一個字符串
system("ifconfig -a | grep inet | "
"sed 's/\\([ ]*[^ ]*\\)\\([ ]*[^ ]*\\).*$/\\1 \\2/' "
" > address.txt") ;
我得到的輸出文件。我如何將輸出分配給一個變量。
編輯:在@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比我平時會,但你似乎有您希望使用依賴於這一種方法。
使用'popen',而不是'system',然後從標準輸入讀取到您的字符串 – 2010-10-22 15:18:51
@保羅的R - 這是比我更好的主意,海事組織 – 2010-10-22 15:41:41
@Steve:感謝 - 我將做它一個答案,但我對Windows不熟悉是否有'popen'。 – 2010-10-22 16:24:58