linux 流量统计小程序

源码如下:

//2015/7/2 10:30:35
//gino
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>

#define FLOW_RX_FILE    "/sys/class/net/eth0/statistics/rx_bytes"
#define FLOW_TX_FILE    "/sys/class/net/eth0/statistics/tx_bytes"
#define FLOW_STATISTICS     "/tmp/statistics"
#define DATA_BUF_SIZE       1024

int main(int argc, char **argv){

        int flowRx_fd, flowTx_fd, flowSt_fd, data_size ;
        char RX_buf[DATA_BUF_SIZE] , TX_buf[DATA_BUF_SIZE];
        FILE *flowSt_pin = NULL;

        if((flowRx_fd = open(FLOW_RX_FILE, O_RDONLY)) == -1){
            fprintf(stderr, "RX_open: %s\n",strerror(errno));
            exit(EXIT_FAILURE);
        }

        if((flowTx_fd = open(FLOW_TX_FILE, O_RDONLY)) == -1){
            fprintf(stderr, "TX_open: %s\n",strerror(errno));
            exit(EXIT_FAILURE);
        }

        if((flowSt_fd = open(FLOW_STATISTICS, O_RDWR|O_CREAT, S_IRUSR|S_IWUSR)) == -1){
            fprintf(stderr, "ST_open: %s\n",strerror(errno));
            exit(EXIT_FAILURE);
        }

        //将文件描述符转换成文件指针
        flowSt_pin = fdopen(flowSt_fd, "w+");

        while(1){

            bzero(RX_buf,sizeof(RX_buf));
            bzero(TX_buf,sizeof(TX_buf));

            if((data_size = read(flowRx_fd,RX_buf,sizeof(RX_buf))) == -1){
                fprintf(stderr, "read_rx: %s\n",strerror(errno));
            }
            RX_buf[data_size -1 ] = ‘\0‘;

            if((data_size = read(flowTx_fd,TX_buf,sizeof(TX_buf))) == -1){
                fprintf(stderr, "read_tx: %s\n",strerror(errno));
            }
            TX_buf[data_size -1 ] = ‘\0‘;

            //JOSN格式  {"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"}
            fprintf(flowSt_pin,"{\"up_flow\":\"%s\",\"down_flow\":\"%s\"}\n",RX_buf, TX_buf);
            fflush(flowSt_pin);

            lseek(flowRx_fd, 0, SEEK_SET);
            lseek(flowTx_fd, 0, SEEK_SET);

            sleep(2);

            //更改文件大小,保存向文件中写入的数据达到覆盖效果
            ftruncate(flowSt_fd, 0);
        }

        return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-07 19:25:02

linux 流量统计小程序的相关文章

WordCount:字符统计小程序

WordCount:字符统计小程序 github地址: https://github.com/Kassation/WordCount 任务1:分析整理需求, 完成PSP表格 分析整理需求: 首先分析基本功能: 1. 统计字符数:空格,制表符,换行符均算作字符 2. 统计单词数:由空白符和逗号分隔开的字符串算作单词 3. 统计行数:由换行符分隔开的字符串算作一行 所以暂时模块化出三个函数,分别来进行不同的统计并直接返回输出的字符串. 然后需要实现读取命令行中的参数的功能,基本思路是,先获取-c.-

云开发与WePY,快速实现Linux命令查询小程序

大家好,今天我来为大家分享一下, Linux 命令查询小程序中的 WePY 云开发实践. Why WePY首先,先分享一下为什么要选择 WePY ? 在项目开始进行选型的时候,我可选的底层框架有 WePy.MPVue.Taro.MinUI,这些框架都是工程化做得很好的框架,可以帮助小程序项目长期进行维护.其中,Taro 因为采用的是我所不熟悉的 React ,所以从一开始就被排除.MPVue 我看了以后,它更多是给 Web 开发者提供小程序转化工具,而不是给小程序开发者提供类 Vue 工具,所以

python--代码统计小程序

有人说,大学生在校期间要码够10W行代码,也有人说,看的不是写代码的行数,而是修改代码的行数... 不管谁说,说的人都挺牛的 咳,首先给自己定个小目标吧,5W行代码!成天写代码,啥时候到5W呢?为了更准确的衡量自己,写了一个代码统计行数的小程序,初学编程的可以借鉴下,从开始统计自己的代码行数 程序很简单,遍历代码文件的行数,将行数变量存放在本地文件中,可以在加个时间戳 1 #coding=gbk 2 import os 3 import time 4 5 seq = '' 6 n = 0 7 t

微信百度合作?在百度也可以统计小程序|极限工坊淘小咖

近期随着百度移动统计通过多年,沉淀下来的分析方法论正式赋能微信小程序,从此,App.百度小程序.微信小程序等多端数据可以在一处查看! 以后,你可以通过百度统计查看到微信小程序全方位的数据. 囊括6大模块分析,包括用户分析.使用分析.场景分析.留存分析.转化分析.分享传播. 数据主要有以下方面: 用户类指标:新用户数.老用户数.用户平均启动次数.使用时长.新用户/老用户占比-- 活跃类指标:日.周.月活跃用户,和流失的活跃的用户-- 留存类指标:留存用户数.日/周/月留存率 页面类指标:UV.PV

代码统计小程序

目录 关于os.work 关于 sys.argv 代码统计程序 关于os.work import os res = os.walk(r'D:\LearnPython\program2') #for path, _, file_list in res: #print(path)#提取出根目录下所有的文件夹 #print(file_list)#提取出文件夹里所有的文件 for _,i,_ in res: print(i)#一层一层打印出所有文件夹的名字 关于 sys.argv 在cmd中运行时如果.

linux 查看TCP连接IP统计小程序

#!/usr/bin/env python #coding:utf8 import commands import time import sys def main(count_list): print "数量\t\tIP地址 \t\t\t连接状态" for i in count_list: for x in i.split(): if len(x) > 14: print "%s \t"% x, else: print "%s \t\t"

Linux中的小程序—— 进度条

在说正事之前,首先科普一下在什么是回车什么是换行? 我们通常所说的回车就是从一行的末尾跳到另一行的开头,但事实上这却是由回车和换行两个动作所完成的,也就是键盘上<enter>所完成的工作.但实际上,回车是光标重回开头,换行就仅仅只是光标往下一行.(回车\r,r为return:换行\n,n为newline) 对于一个shell中运行的程序,默认情况下printf()是行缓冲的.意思是printf输出时是先将内容输送到缓冲区,再从缓冲区输送到屏幕上.当写入的字符中含有换行符\n时,缓冲区就会立马把

【linux】——一个小程序

利用工作之余为小伙伴写了份作业,关于进程间通信的.题目如下: 父进程从键盘上接受1000个数据,对其求和sum1,子进程对这1000个数平方和sum2,结果传给父进程,父进程将sum1+sum2后,打印结果. 要求:用大小为10的共享区传递1000个数据:子进程用消息机制将sum2传给父进程. 主要利用共享内存实现进程间通信,使用管道实现进程间竞争关系,FreeBSD下测试通过.代码如下:时间有限,有可能有些不足,希望高手给予指点. 1 #include <stdio.h> 2 #includ

微信小程序再添能力:搜一搜增加小程序入口

随着移动互联网的快速发展,流量正悄然的变成大数据,借助"入口+流量"模式,互联网激活了大量的个性化入口,积累了巨量流量,并形成高企的资本市场估值.小程序作为当前最新的应用模式,在微信不断开放入口之后,或将迎来流量的爆发期. 今天,笔者发现,微信又为小程序开放了一个超级入口:微信搜一搜增添小程序入口.用户在微信发现中,通过搜一搜 输入关键词,比如水果,搜索页面便会出现相关小程序推荐,点击更多,可直接进入小程序"水果"的搜索页面,相关小程序都会出现在页面中. 点击微信搜