C++獲取CMD命令輸出的字元
阿新 • • 發佈:2019-01-29
上週在做西山居筆試題的時候,最後一題問到:獲取本機與www.baidu.com之間的延遲並儲存到檔案中,題目要求用虛擬碼作答,不過我沒接觸過虛擬碼,直接寫上了中文步驟, 所以估計是涼了。。。
在C++中 呼叫CMD命令使用system函式,比如要獲得與百度網址的延遲,程式碼如下
system("ping www.baidu.com"); //將在螢幕上輸出
輸出之後該怎麼獲取輸出的字元呢?
答案是使用popen()函式
FILE *popen (const char * command , const char * type); //函式原型
popen()函式的作用是建立一個管道,system命令執行後只會在螢幕輸出結果,想要獲取資料,得用popen()開啟一個管道,返回一個FILE*型別,並用fgets獲取輸出,由於popen()是linux下的一個函式,所以在windows下要使用_popen();
使用方法如下
FILE *file;
char ptr[1024] = {0};
char cmd[1024] = {0};
strcat(ptr, "ping www.baidu.com");
if ((file = _popen(ptr, "r")) != NULL)
{
while (fgets(cmd, 1024, file) != NULL){ //ping命令的最後一行才是獲取平均值,所以只需要最後一行的字串
}
_pclose(file);
}
int len = strlen(cmd); //獲取字串長度,只輸出平均 = xxms, 這裡用了比較笨的方法,可以用其他方法來獲取ping的平均值
cout << (cmd+(len-12));
結果