从c ++中的system命令检索ping时间(ping x.x.x.x -n)

时间:2013-06-25 06:13:18

标签: c++ windows console ping icmp

我正在编写一个小型控制台应用程序(使用visual studio 2012的Windows平台),显示当前ping到IP和其他一些统计信息。 (最后100次的平均值,丢包等...) 这是我的实际实现:

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。 但是当我执行程序时,我在进程管理器中看到ping.exe和cmd.exe保持打开/关闭,这是正常的,因为在每个popen中它都会启动一个。

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

我查看了IcmpSendEcho命令,但对我来说这看起来非常复杂。我基本上想要一个运行到后台的简单函数,并在每次收到一个新函数时将ping响应时间写入全局变量。

1 个答案:

答案 0 :(得分:2)

如果IcmpSendEcho看起来很复杂,或许this source code可以提供帮助,您可以根据需要进行修改。