1. 程式人生 > >C++獲取CMD命令輸出的字元

C++獲取CMD命令輸出的字元

上週在做西山居筆試題的時候,最後一題問到:獲取本機與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));

結果
這裡寫圖片描述