我正在编写一个小型控制台应用程序(使用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响应时间写入一个全局变量中。
您可能想阅读http://stackoverflow.com/questions/6697292/pinging-from-a-c-cprogram的第二个答案(Windows之一) –