我正在编写一个小型控制台应用程序(使用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响应时间写入全局变量。