当前位置:天才代写 > tutorial > C语言/C++ 教程 > C语言实现ifconfig获取网卡吸收和发送流量统计

C语言实现ifconfig获取网卡吸收和发送流量统计

2017-11-02 08:00 星期四 所属: C语言/C++ 教程 浏览:1469

副标题#e#

在Windows下我们可以操作ipconfig呼吁获取网卡的相关信息,在Linux下呼吁是ifconfig

我们可以 获取的信息更为富厚,个中包罗网卡吸收和发送的流量,用C语言实现这个呼吁并不是一件简朴的事,由此, 博主经查阅相关资料,得知,网卡的相关信息生存在 /proc/net/dev  这个文件夹下,所以,我们可以 通过读取这个文件里的信息获取相应网卡的信息。

这个文件包括四部门内容,别离是:发送包的个数 ,发送的流量,吸收包的个数,吸收的流量,同时,由于网络情况在不绝的变革之中,所以,这个文件的内容 也是在及时更新的。

下面这张图片显示的是 ifconfig 呼吁的实现功效

C语言实现ifconfig获取网卡接收和发送流量统计

留意,个中有很多参数,这些参数并不生存在文件中


#p#副标题#e#

下面是博主实现的一段C语言代码获取吸收和 发送的流量

重要的处所已经给出了注释

#include <stdio.h>  
#include <string.h>  
#include <sys/types.h>  
#include <sys/stat.h>  
#include <fcntl.h>  
#include <unistd.h>  
#include <stdlib.h>  
      
long *my_ipconfig(char *ath0)  
{  
          
    int nDevLen = strlen(ath0);  
    if (nDevLen < 1 || nDevLen > 100)  
    {  
        printf("dev length too long\n");  
        return NULL;  
    }  
    int fd = open("/proc/net/dev", O_RDONLY | O_EXCL);  
    if (-1 == fd)  
    {  
        printf("/proc/net/dev not exists!\n");  
        return NULL;  
    }  
          
        char buf[1024*2];  
        lseek(fd, 0, SEEK_SET);  
        int nBytes = read(fd, buf, sizeof(buf)-1);  
        if (-1 == nBytes)  
        {  
            perror("read error");  
            close(fd);  
            return NULL;  
        }  
        buf[nBytes] = '\0';  
        //返回第一次指向ath0位置的指针  
        char* pDev = strstr(buf, ath0);  
        if (NULL == pDev)  
        {  
            printf("don't find dev %s\n", ath0);  
            return NULL;  
        }  
        char *p;  
        char *ifconfig_value;  
        int i = 0;  
        static long rx2_tx10[2];  
        /*去除空格,制表符,换行符等不需要的字段*/
        for (p = strtok(pDev, " \t\r\n"); p; p = strtok(NULL, " \t\r\n"))  
        {  
            i++;  
            ifconfig_value = (char*)malloc(20);  
            strcpy(ifconfig_value, p);  
            /*获得的字符串中的第二个字段是吸收流量*/
            if(i == 2)  
            {  
                rx2_tx10[0] = atol(ifconfig_value);  
            }  
            /*获得的字符串中的第十个字段是发送流量*/
            if(i == 10)  
            {  
                rx2_tx10[1] = atol(ifconfig_value);  
                break;  
            }  
            free(ifconfig_value);  
        }  
        return rx2_tx10;  
}  
int main()  
{  
    long *ifconfig_result;  
    double re_mb;  
          
    /*eth0 是博主计较机上的网卡的名字*/
    ifconfig_result = my_ipconfig("eth0");  
          
    /*生存在文件中的数值的单元是B,颠末计较换算成MB*/
    re_mb = (double)ifconfig_result[0]/(1024*1024);  
    printf("吸收流量:%0.2f MB\n",re_mb);  
          
    /*生存在文件中的数值的单元是B,颠末计较换算成MB*/
    re_mb = (double)ifconfig_result[1]/(1024*1024);  
    printf("发送流量:%0.2f MB\n",re_mb);  
          
}

生存文件的名字为 dele.c

运行相关的呼吁:

gcc -o dele dele.c

./dele

获得功效如下图所示

C语言实现ifconfig获取网卡接收和发送流量统计

由此获得了网卡的吸收和发送流量

 

    关键字:

天才代写-代写联系方式