#include <stdio.h>
#include <sys/ioctl.h>
#include <stdlib.h>
#include <string.h>
/* 执行命令,并赋值@reslut */
void executeCMD(const char *cmd, char *result, unsigned long resultLength)
{
printf("\n执行系统2命令cmd=[%s]\n", cmd);
char buf_ps[1024]; //一行
FILE *ptr;
if ((ptr = popen(cmd, "r")) != NULL)
{
while (fgets(buf_ps, sizeof(buf_ps), ptr) != NULL)
{
if (resultLength < strlen(result) + strlen(buf_ps))
{
printf("长度%ld超出%ld,退出\n", (long)(strlen(result) + strlen(buf_ps)), (long)sizeof(buf_ps));
break;
}
strcat(result, buf_ps);
}
}
else
{
printf("popen %s error\n", cmd);
}
pclose(ptr);
ptr = NULL;
printf("执行结果(%ld):%s\n", (long)strlen(result),result);
}
/**
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
C:\Users\Administrator>ping
用法: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]
[-r count] [-s count] [[-j host-list] | [-k host-list]]
[-w timeout] [-R] [-S srcaddr] [-4] [-6] target_name
选项:
-t Ping 指定的主机,直到停止。
若要查看统计信息并继续操作 - 请键入 Control-Break;
若要停止 - 请键入 Control-C。
-a 将地址解析成主机名。
-n count 要发送的回显请求数。
-l size 发送缓冲区大小。
-f 在数据包中设置“不分段”标志(仅适用于 IPv4)。
-i TTL 生存时间。
-v TOS 服务类型(仅适用于 IPv4。该设置已不赞成使用,且
对 IP 标头中的服务字段类型没有任何影响)。
-r count 记录计数跃点的路由(仅适用于 IPv4)。
-s count 计数跃点的时间戳(仅适用于 IPv4)。
-j host-list 与主机列表一起的松散源路由(仅适用于 IPv4)。
-k host-list 与主机列表一起的严格源路由(仅适用于 IPv4)。
-w timeout 等待每次回复的超时时间(毫秒)。
-R 同样使用路由标头测试反向路由(仅适用于 IPv6)。
-S srcaddr 要使用的源地址。
-4 强制使用 IPv4。
-6 强制使用 IPv6。
C:\Users\Administrator>
*/
int main(int argc, char *argv[])
{
char result[40000] = {0}; //存放结果
executeCMD("ping -c 1 -w 1 59.110.228.61", result, sizeof(result)); //执行命令并返回结果
if(strstr(result,", 0% packet loss,")!=NULL){//判断字符串参数2是否是参数1的子串
printf("YES");
}else{
printf("NO");
}
return 0;
}