Linux统计网卡流量
cat /proc/net/dev
Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。
/proc文件系统中包含了很多目录,其中/proc/net/dev就是提供给用户读取或更改网络适配器及统计信息的途径。
注意:因为proc是伪文件系统,只存在内存中,所以这里统计的数据的时间起止时间是:系统启动到命令执行,如果此时系统发生重启,数据将会清零。

参数说明:
bytes: 接口发送或接收的数据的总字节数
packets: 接口发送或接收的数据包总数
errs: 由设备驱动程序检测到的发送或接收错误的总数
drop: 设备驱动程序丢弃的数据包总数
fifo: FIFO缓冲区错误的数量
frame: 分组帧错误的数量
colls: 接口上检测到的冲突数
compressed: 设备驱动程序发送或接收的压缩数据包数
carrier: 由设备驱动程序检测到的载波损耗的数量
multicast: 设备驱动程序发送或接收的多播帧数
其实,我们平时经常用的很多查看网卡实时流量的命令,都是通过读取该目录下的实时流量,并通过简单计算得到的。
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>// 更改为你要监测的网卡名称,可以通过ifconfig获得
#define INTERFACE_NAME "ens33"unsigned long long ticBytes;
unsigned long long tocBytes;// 读取指定网卡的统计信息
int readInterfaceStats(const char *interfaceName, bool isTic) {FILE *file = fopen("/proc/net/dev", "r");if (file == NULL) {printf("Failed to open /proc/net/dev");return -1;}char line[256];while (fgets(line, sizeof(line), file)) {if (strstr(line, interfaceName) != NULL) {if (isTic) {// 读取bytes的相关信息,用%*s跳过无用字符串sscanf(line, "%*s %llu", &ticBytes);}else {sscanf(line, "%*s %llu", &tocBytes);}fclose(file);return 0;}}fclose(file);return -1;
}long *myIfconfig(char *interfaceName)
{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){printf("read error");close(fd);return NULL;}buf[nBytes] = '\0';close(fd);
//返回第一次指向netCard位置的指针char* pDev = strstr(buf, interfaceName);if (NULL == pDev){printf("don't find dev %s\n", interfaceName);return NULL;}char *p;char *ifconfigValue;int i = 0;static long rx2Tx10[2];
/*去除空格,制表符,换行符等不需要的字段*/for (p = strtok(pDev, " \t\r\n"); p; p = strtok(NULL, " \t\r\n")){i++;ifconfigValue = (char*)malloc(20);strcpy(ifconfigValue, p);
/*得到的字符串中的第二个字段是接收流量*/if(i == 2){rx2Tx10[0] = atol(ifconfigValue);}
/*得到的字符串中的第十个字段是发送流量*/if(i == 10){rx2Tx10[1] = atol(ifconfigValue);break;}free(ifconfigValue);}return rx2Tx10;
}int main()
{double interval = 1.0; // 采样间隔,单位为秒while (1) {if (readInterfaceStats(INTERFACE_NAME, true) == -1) {printf("Failed to read interface stats\n");return -1;}sleep((unsigned int)interval);if (readInterfaceStats(INTERFACE_NAME, false) == -1) {printf("Failed to read interface stats\n");return -1;}double kbps = (tocBytes - ticBytes) / interval / 1024;printf("receive speed is Kb/s: %.2f\n", kbps);long *ifconfigResult;double reKb;ifconfigResult = myIfconfig(INTERFACE_NAME);reKb = (double)ifconfigResult[0] / (1024);printf("Receive total: %0.2f KB\n", reKb);reKb = (double)ifconfigResult[1] / (1024);printf("Send total: %0.2f KB\n", reKb);}return 0;
}相关文章:
Linux统计网卡流量
cat /proc/net/dev Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。…...
设计可编辑表格组件
前言 什么是可编辑表格呢?简单来说就是在一个表格里面进行表单操作,执行增删改查。这在一些后台管理系统中是尤为常见的。 今天我们根据vue2 element-ui来设计一个表单表格组件。(不涉及完整代码,想要使用完整功能可以看底部连…...
低代码是美食!!!
一、什么是低代码 低代码是一种软件开发方法,通过图形化界面和少量手写代码,让开发者能够更迅速、简单地构建应用程序。相比传统的编码方式,低代码平台提供了可视化的开发工具和预构建的组件,使开发过程更加快捷高效。 二、低代码…...
计算机网络网络层(期末、考研)
计算机网络总复习链接🔗 目录 路由算法静态路由与动态路由距离-向量算法链路状态路由算法层次路由 IPv4(这个必考)IPv4分组IPv4地址与NAT子网划分与子网掩码、CIDRARP、DHCP与ICMP地址解析协议ARP动态主机配置协议DHCP IPv6IPv6特点 路由协议…...
LCR 120. 寻找文件副本
解题思路: 利用增强for循环遍历documents,将遇见的id加入hmap中,如果id在hamp中存在,则直接返回id class Solution {public int findRepeatDocument(int[] documents) {Set<Integer> hmapnew HashSet<>();for(int d…...
git切换分支
切换到你想要保留的分支: 确保你在本地已经切换到了你想要保留的分支。 git checkout 要保留的分支名更改远程仓库地址: 如果你还没有更改远程仓库地址,使用 git remote set-url 来更改它。 git remote set-url origin 新的仓库地址推送当前分…...
Android 在UploadEventService使用ThreadPoolManager线程管理传递数据给后台
Android 在UploadEventService使用ThreadPoolManager线程管理传递数据给后台,如何实现呢? 可以通过以下步骤使用ThreadPoolManager线程管理传递数据给后台: 创建一个ThreadPoolManager类来管理线程池,比如: public cl…...
网络(十)ACL和NAT
前言 网络管理在生产环境和生活中,如何实现拒绝不希望的访问连接,同时又要允许正常的访问连接?当下公网地址消耗殆尽,且公网IP地址费用昂贵,企业访问Internet全部使用公网IP地址不够现实,如何让私网地址也…...
JavaScript算法46- 最长连续序列(leetCode:128middle)
128. 最长连续序列 一、题目 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 输入:nums [100,4,200,1,3,2] 输出…...
提升 API 可靠性的五种方法
API 在我们的数字世界中发挥着关键的作用,使各种不同的应用能够相互通信。然而,这些 API 的可靠性是保证依赖它们的应用程序功能正常、性能稳定的关键因素。本文,我们将探讨提高 API 可靠性的五种主要策略。 1.全面测试 要确保 API 的可靠性…...
【K8S 系列】认识k8s、k8s架构
一、什么是k8s? Kubernetes 简称 k8s,是支持云原生部署的一个平台,k8s 本质上就是用来简化微服务的开发和部署的,用于自动化部署、扩展和管理容器化应用的开源容器编排技术。对于传统的docker其实也提供了容器编排的技术docker-compose&…...
通过这5步,快速成为数据分析师
1. 学习基础知识:掌握统计学、数学和编程等基础知识是成为数据分析师的第一步。你可以参加在线课程、教育平台或自学来提高自己的技能。 2. 学习数据分析工具:熟练使用数据分析工具如Python、R和SQL等是必要的。这些工具可以帮助你处理和分析大量的数据…...
深入解析 Spring 和 Spring Boot 的区别
目录 引言 1. 设计理念 1.1 Spring 框架的设计理念 1.2 Spring Boot 的设计理念 2. 项目配置 2.1 Spring 框架的项目配置 2.2 Spring Boot 的项目配置 3. 自动配置 3.1 Spring 框架的自动配置 3.2 Spring Boot 的自动配置 4. 微服务支持 4.1 Spring 框架的微服务支持…...
Python日期范围按旬和整月以及剩余区间拆分
昨天见到了一个比较烧脑的问题: 咋一看可能理解问题比较费劲,可以直接看结果示例: 当然这个结果在原问题上基础上有一定改进,例如将同一天以单个日期的形式展示。 如何解决这个问题呢?大家可以先拿测试用例自己试一下…...
windows安装sqlserver2008后连接失败问题
刚安装好的sqlserver在安装服务器上,直接使用Windows身份认证登录就报错 未找到或无法访问服务器。请验证实例名称是否正确并且SQL Server已配置为允许远程连接。(provider:命名管道提供程序,error:40 -无法打开到SQLS…...
mysql innodb知识记录
官方文档 官网架构图 innodb 特性 内存 buffer pool 采用优化后的LRU算法, 3/8 of the buffer pool is devoted to the old sublist.The midpoint of the list is the boundary where the tail of the new sublist meets the head of the old sublist.When In…...
在排序数组中查找元素的第一个和最后一个位置(Java详解)
一、题目描述 给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。 示…...
k8s 安装firewalld导致的网络疑难问题处理
场景 ubuntu 操作系统,部署了k8s集群,n 台 机器,某些机器之间 telnet ip 10250不通。 ufw 是关闭的,然后抓包会看到如下错误 04:43:09.154362 IP 192.168.1.3.56608 > 192.168.1.183.8000: Flags [S], seq 3664350430, win 64240, options [mss 1460,sackOK,TS val 281…...
人工智能中的巨兽:图神经网络大模型的崛起
导言 图神经网络大模型的涌现标志着人工智能领域的一次革命。本文将深入研究这些庞大而强大的模型,探讨其背后的技术原理、关键应用以及引发的社会影响。 1. 技术原理 图神经网络大模型以其对图结构数据的卓越处理能力而著称。其技术原理包括: 图卷积神…...
【LeetCode刷题笔记(6-2)】【Python】【三数之和】【双指针】【中等】
文章目录 引言三数之和题目描述示例示例1示例2示例3 提示 解决方案3:【双指针】结束语 三数之和 引言 编写通过所有测试案例的代码并不简单,通常需要深思熟虑和理性分析。虽然这些代码能够通过所有的测试案例,但如果不了解代码背后的思考过程…...
别再手动调图了:用Python+Midjourney API自动批处理建筑效果图(含GitHub开源脚本+37个真实项目参数)
更多请点击: https://kaifayun.com 第一章:别再手动调图了:用PythonMidjourney API自动批处理建筑效果图(含GitHub开源脚本37个真实项目参数) 建筑可视化团队常面临重复性高、参数微调繁琐的出图任务——同一方案需生…...
AI智能体长期记忆系统Mem0:从向量检索到个性化对话的实现
1. 项目概述:从记忆体到智能伙伴的进化最近在AI应用开发圈里,一个名为mem0ai/mem0的开源项目引起了我的注意。乍一看这个名字,你可能会联想到“内存”或者“记忆”,没错,它的核心正是围绕着“记忆”这个概念展开的。但…...
Prompt-Builder:构建可复用提示词模板,提升大模型工程化效率
1. 项目概述:Prompt-Builder 是什么,以及为什么你需要它如果你和我一样,在过去一年里深度使用过各种大语言模型,那你一定经历过这样的时刻:面对一个复杂的任务,你精心构思的提示词(Prompt&#…...
Django 模板(Template):告别硬编码,实现动态 HTML页面
IT策士 10余年一线大厂经验,专注 IT 思维、架构、职场进阶。 当你开始构建一个真正的 Web 应用时,很快就会厌倦这种方式: def home(request):return HttpResponse("<h1>欢迎,张三!</h1><p>今天…...
为什么OpenVSP是航空航天工程师的“参数化建模瑞士军刀“?5个实战场景深度解析
为什么OpenVSP是航空航天工程师的"参数化建模瑞士军刀"?5个实战场景深度解析 【免费下载链接】OpenVSP A parametric aircraft geometry tool 项目地址: https://gitcode.com/gh_mirrors/ope/OpenVSP 在飞机设计领域,传统CAD软件的复杂…...
番茄小说下载器终极指南:如何轻松构建个人离线图书馆
番茄小说下载器终极指南:如何轻松构建个人离线图书馆 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 你是否经常在地铁、高铁或飞机上想要阅读番茄小说,…...
用Python+OpenCV搞定热红外与可见光图像自动对齐(附完整代码与避坑指南)
PythonOpenCV实战:热红外与可见光图像自动配准全流程解析 引言 在工业检测、安防监控、医疗诊断等领域,热红外与可见光图像的融合分析正成为关键技术。两种成像模式各具优势:可见光图像色彩丰富、细节清晰,而热红外图像则能揭示物…...
第五课:YOLOv5-Lite模型适配AK3918AV130转换实战
文章目录一、课程导学二、课程核心关键词三、模型转换整体原理与流程概述四、YOLOv5-Lite转ONNX标准化实战五、安凯微工具链模型适配与量化实战六、AK3918AV130专属模型编译实战七、模型仿真校验与异常排查八、课堂实操示例九、本节课核心总结十、课后作业十一、课程回顾总结上…...
使用Taotoken CLI工具一键配置团队开发环境与统一模型端点
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用Taotoken CLI工具一键配置团队开发环境与统一模型端点 当团队需要统一接入多个大模型时,为每位成员手动配置API密钥…...
从‘调制方向’到‘闭环稳定’:一个公式搞定单相PWM整流器电流环PI参数整定
从动态模型到实战调参:单相PWM整流器电流环PI整定的工程化方法 在电力电子控制领域,单相PWM整流器的电流环设计一直是工程师面临的实操难点。理论教材中复杂的传递函数推导与实验室里实际系统的振荡现象之间,往往存在一道需要经验跨越的鸿沟…...
