C语言实现ifconfig获取网卡接收和发送流量统计
在Windows下我们可以利用ipconfig命令获取网卡的相关信息,在Linux下命令是ifconfig
我们可以获取的信息更为丰富,其中包括网卡接收和发送的流量,用C语言实现这个命令并不是一件简单的事,由此,博主经查阅相关资料,得知,网卡的相关信息保存在 /proc/net/dev 这个文件夹下,所以,我们可以通过读取这个文件里的信息获取相应网卡的信息。
这个文件包含四部分内容,分别是:发送包的个数,发送的流量,接收包的个数,接收的流量,同时,由于网络环境在不断的变化之中,所以,这个文件的内容也是在实时更新的。
下面这张图片显示的是 ifconfig 命令的实现结果
注意,其中有许多参数,这些参数并不保存在文件中
下面是博主实现的一段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获取网卡接收和发送流量统计的更多相关文章
- 【Linux环境编程】获取网卡的实时网速
在windows以下.我们能够看到360或者是qq安全卫士的"安全球".上面显示实时的网速情况.那么在linux里面怎样获取网卡的实时网速?事实上原理非常easy,读取须要获取网速 ...
- php获取网卡MAC地址源码
<?php /** 获取网卡的MAC地址原码:目前支持WIN/LINUX系统 获取机器网卡的物理(MAC)地址 **/ class GetMacAddr{ var $return_array = ...
- Python 获取 网卡 MAC 地址
/*********************************************************************** * Python 获取 网卡 MAC 地址 * 说明: ...
- PHP获取网卡的MAC地址原码;目前支持WIN/LINUX系统 获取机器网卡的物理(MAC)地址
声明转换于其它博客当中的. <?php /** 获取网卡的MAC地址原码:目前支持WIN/LINUX系统 获取机器网卡的物理(MAC)地址 **/ class GetMacAddr{ var $ ...
- [日常] GO语言圣经-并发获取多个URL
go语言圣经-并发获取多个URL 1.GO最新奇的特性就是对并发编程的支持,goroutine和channel 2.goroutine是一种函数的并发执行方式,而channel是用来在goroutin ...
- ubuntu下仅仅获取网卡一的ip地址 && shell中字符串拼接
问题描述: ubuntu下仅仅获取网卡一的ip地址 问题背景: eth0,eth1,eth2……代表网卡一,网卡二,网卡三…… lo代表127.0.0.1,即localhost | 问题描述: 已知字 ...
- 获取网卡速率,cpu使用率
];//获取网卡名称 PerformanceCounter NetworkR = new PerformanceCounter("Network Interface", " ...
- linux -小记(1) 问题:"linux ifconfig查看网卡名称与配置文件不否" 或 启动网卡提示“ eth0 似乎不存在, 初始化操作将被延迟”。
"linux ifconfig查看网卡名称与配置文件不否" 或 启动网卡提示" eth0 似乎不存在, 初始化操作将被延迟" . 问题 1. service n ...
- ios开发 iphone中获取网卡地址和ip地址
这是获取网卡的硬件地址的代码,如果无法编译通过,记得把下面的这几个头文件加上把. #include <sys/socket.h> // Per msqr#include <sys/s ...
随机推荐
- springMVC源码分析--ViewNameMethodReturnValueHandler返回值处理器(三)
之前两篇博客springMVC源码分析--HandlerMethodReturnValueHandler返回值解析器(一)和springMVC源码分析--HandlerMethodReturnValu ...
- 20160210.CCPP体系详解(0020天)
程序片段(01):01.二级指针.c 内容概要:二级指针 #include <stdio.h> #include <stdlib.h> //01.二级指针: // 1.使用场景 ...
- Android-Chart
MPAndroidChart 包括折线图.曲线图.柱形图.饼图.K线图等等 我的地址:https://github.com/kongqw/MPAndroidChart 开源地址:https://git ...
- PHP 验证码 浅析
拓展 背景图 imagecreatetruecolor imagecolorallocate imagepng imagedestoryimage 简易数字验证码 imagecolorallocate ...
- Unity UGUI图文混排(六) -- 超链接
图文混排更新到超链接这儿,好像也差不多了,不过就在最后一点,博主也表现得相当不专业,直接整合了山中双木林同学提供的超链接的解决方案,博主甚至没来得及细看就直接复制了,但感觉还是挺好用的. 博主已经将超 ...
- weakref 待解决.
暂时不知为何在控制台多执行一次b()后,del a就不会立即销毁Foo实例. >>> class Foo(object): def __init__(self): self.obj ...
- Linux 高性能服务器编程——Linux服务器程序规范
问题聚焦: 除了网络通信外,服务器程序通常还必须考虑许多其他细节问题,这些细节问题涉及面逛且零碎,而且基本上是模板式的,所以称之为服务器程序规范. 工欲善其事,必先利其器,这篇主要来探 ...
- RxJava(四) concatMap操作符用法详解
欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/51533282 本文出自:[余志强的博客] concatMap操作符的 ...
- T-SQL注意事项(1)——SET NOCOUNT ON的去与留
前言 用了一段时间T-SQL之后,哪怕自己没用过,也多多少少看过SSMS中的SET NOCOUNT ON命令,很多性能优化文章中都有提到这个东西,它们建议尽可能使用这个命令减少网络传输的压力,那么今天 ...
- Java集合-----java集合框架常见问题
1什么是Java集合API Java集合框架API是用来表示和操作集合的统一框架,它包含接口.实现类.以及帮助程序员完成一些编程的算法. 简言之,API在上层完成以下几件事: ● 编程更加省力,提高城 ...