加入收藏 | 设为首页 | 会员中心 | 我要投稿 广州站长网 (https://www.020zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux:popen() 获取 ping 命令结果

发布时间:2022-12-09 13:32:44 所属栏目:Linux 来源:互联网
导读: 获取 ping 命令结果
进行网络软件的开发时,我们有时需要测试网络是否是连通状态,最简单的方式是使用 ping 命令,根据 ping 命令收发 ICMP 的包数,可以判断网络状态。
通常情况下,我们使

获取 ping 命令结果

进行网络软件的开发时,我们有时需要测试网络是否是连通状态,最简单的方式是使用 ping 命令,根据 ping 命令收发 ICMP 的包数,可以判断网络状态。

通常情况下,我们使用 system() 系统函数去执行 shell 命令。但是该函数只能返回命令是否执行成功的结果,并不能返回命令被执行后的返回值。此时,我们可以使用 popen() 函数去实现该功能。源码如下:

#include 
#include 
?
int main()
{
    FILE *fp;
    char line[256];
    char * p;
    char n_tranas[3];
    char n_receive[3];
?
    fp = popen("ping 127.0.0.1 -c 4", "r");
    if (fp == NULL)
    {
        printf("error!\n");
        return -1;
    }
    while(!feof(fp))
    {
        if (fgets(line, sizeof(line), fp) != NULL)
        {
            printf("p:%s", line);
            if ((p =strstr(line, "packets")) !=NULL)
            {
                sscanf(line, "%[^ ] %*s %*s %[^ ]", n_tranas,n_receive);
            }
        }
    }
    
    printf("%s transmitted %s received\n", n_tranas, n_receive);
    
    pclose(fp);
?
    return 0;
}

执行结果:

matlab中feof函数_linux feof函数_php feof函数

popen() 函数说明

函数原型:

FILE *popen(const char *command, const char *type);

参数:

command:需要执行的命令,比如例程中的 "ping 127.0.0.1 -c 4";

type:对命令的操作类型,值为 “r" 或 “w"。“r“ 表示获取命令的结果linux feof函数,”w“ 表示向命令写入数据。

返回值:

FILE*:文件指针,后续可以使用 fread()、fgets() 读取命令的返回结果。

总结

我这里只是简单的说明了 popen() 的使用方式。其实使用该函数时有许多需要考虑的地方。就像上面的例子,如果 ping 命令失败了,会显示什么结果;如果网络不好,ping 命令卡住了,应当如何处理...大家可以读一下 《UNIX 环境高级编程(第3版)》第15章,详细了解下 popen() 和 pclose()。

(编辑:广州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!