c语言源码ping ip通不通 检测摄像头在不在线 立即返回结果linux

#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;
}

 

©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页