2013-06-25 77 views
0

我正在编写一个小型控制台应用程序(使用visual studio 2012的windows平台),显示当前ping到IP和其他一些统计信息。 (平均最后100pings的,数据包丢失等) 这里是我的实际执行情况:从C++中的系统命令检索ping时间(ping x.x.x.x -n)

char buffer[100]; 
FILE *fp = _popen("ping -l 1 -n 1 61.5.222.121" , "r"); 
for (i=0;i<8;i++) { 
    fgets(buffer,100,fp); 
} 
_pclose(fp) 

我调用这个函数在我的主要有:

_beginthread(ping, 0, NULL); 

然后我提取平来自带有strstr和sscanf_s的缓冲区。 但是当我执行程序时,我在进程管理器中看到ping.exe和cmd.exe会一直打开/关闭,这是正常的,因为在每个popen中它都会启动一个。

我正在寻找一种方法来获取更简单的方式来检索ping时间值。例如,每次在popen中创建一个新行(可以使用“ping google.com -t”命令)时都可以读取输出,这样就只有一个ping.exe和cmd.exe进程可以使所有作业和ping刷新时间会更快。

我已经看过IcmpSendEcho命令,但是这对我来说看起来很复杂。我基本上需要一个简单的函数,它会在后台运行,并在每次接收到一个新的变量时将ping响应时间写入一个全局变量中。

+0

您可能想阅读http://stackoverflow.com/questions/6697292/pinging-from-a-c-cprogram的第二个答案(Windows之一) –

回答