限速linux c语言,基于Linux系统的流量控制程序的C语言代码
基于Linux系统的流量控制程序的C语言代码
基于Linux系统的流量控制程序的C语言代码
mytbf.h头文件
ifndef MYTBF_H_
#define MYTBF_H_
typedef void mytbf_t;
mytbf_t *tbf_init(int bits,int max);
int gettoken(mytbf_t *tbf,int tknum);
int returntoken(mytbf_t *tbf,int rtnum);
int tbffree(mytbf_t *tbf);
#endif
mytbf.c文件
#include
#include
#include
#include
struct tbf_t
{
int bits;
int token;
int maxtoken;
};
struct tbf_t *data=NULL;
int initflag=1;
void sigdo(int s)
{
data->token=data->token+data->bits;
if(data->token>=data->maxtoken)
data->token=data->token;
alarm(1);
}
mytbf_t *tbf_init(int bits,int max)
{
data=malloc(sizeof(*data));
if(bits < 0)
return NULL;
if(bits > max)
return NULL;
data->bits=bits;
data->token=bits;
data->maxtoken=max;
if(initflag)
{
signal(SIGALRM,sigdo);
alarm(1);
initflag=0;
}
return data;
}
int gettoken(mytbf_t *tbf,int tknum)
{
int min;
data=(struct tbf_t *)tbf;
if(tknum < 0)
return -1;
if(tknum > data->maxtoken)
return -2;
while(data->token == 0)
pause();
min=data->token > tknum ? tknum:data->token;
data->token=data->token-min;
return min;
}
int returntoken(mytbf_t *tbf,int rtnum)
{
data=(struct tbf_t *)tbf;
if(rtnum < 0)
return -3;
if(data->token > data->maxtoken-rtnum)
data->token=data->maxtoken;
else
data->token=data->token+rtnum;
return 0;
}
int tbffree(mytbf_t *tbf)
{
free(tbf);
return 0;
}
mycat.c文件:实现Linux终端命令cat的功能,显示文件内容,不过为这个程序加上了流量控制。
#include
#include
#include
#include
#include
#include
#include
#include
#define SIZE 20
#define MAXSIZE 500
static int fd;
void func_closefile()
{
close(fd);
}
int main(int argc,char **argv)
{
char buff[SIZE];
int res;
int res1;
int retnum;
mytbf_t *tbf;
if(argc<2)
{
fprintf(stdout,"出错,命令后没有文件名!\n");
exit(-1);
}
do{
fd=open(argv[1],O_RDONLY);
if(fd < 0)
{
if(errno == EINTR)
continue;
perror("open()");
exit(-2);
}
}while(fd < 0);
atexit(func_closefile);
tbf = tbf_init(SIZE,MAXSIZE);
while(1)
{
retnum=gettoken(tbf,MAXSIZE);
res = read(fd,buff,retnum);
if(retnum-res > 0)
{
returntoken(tbf,retnum-res);
}
if(res==0)
break;
if(res<0)
{
if(errno == EINTR)
continue;
perror("read()");
exit(-3);
}
do{
res1 = write(1,buff,res);
if(res1 < 0)
{
if(errno == EINTR)
continue;
perror("write()");
exit(-4);
}
}while(res1<0);
}
tbffree(tbf);
exit(0);
}
————————————————
版权声明:本文为CSDN博主「风翼随心」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42249237/article/details/81588317
限速linux c语言,基于Linux系统的流量控制程序的C语言代码相关推荐
- linux手机+华为,基于Linux打造,华为重磅宣布,开始在6款手机测试新系统
原标题:基于Linux打造,华为重磅宣布,开始在6款手机测试新系统 全球智能手机的发展已经来到了十字路口,技术瓶颈越来越明显.有数据显示,苹果iphone手机的销量依然在下滑,没有很大的起色,这表明消 ...
- linux电机驱动程序,基于Linux系统的HHARM9电机驱动程序设计
电子科学知识.电机,arm 第24卷 第4期 2005年12月南昌工程学院学报JournalofNanchangInstituteofTechnologyVol.24No.4Dec.2005文章编号: ...
- linux电子相册程序,基于Linux电子相册的
基于Linux电子相册的 (18页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.9 积分 本科毕业论文(设计) 题目: 基于Linux电子相册的 ...
- linux设备资源分配,基于Linux 简化 AMP 配置使其更方便更动态地分配资源
描述 嵌入式系统一般分为两大类:需要硬实时性能的:和不需要硬实时性能的.过去,我们不得不做出艰难抉择: 选择实时操作系统的性能还是我们钟爱的 Linux 系统的丰富特性,然后努力弥补不足之处? 如今, ...
- 基于linux的 设计,基于Linux的智能家居的设计(一)
本课题主要目的是设计和实现一个基于Linux开发平台的智能家居系统.本系统主要使用PVC板做成的家居模型.本系统硬件使用基于ARM架构的samsung S3C6410芯片做成的OK6410开发板为手持 ...
- 基于linux环境pdf,基于Linux环境下的Snif论r设计与芸}瑰.PDF
基于Linux环境下的Snif论r设计与芸}瑰 基于Linux环境下的Snif论r设计与芸}瑰 李刍每莹周姆 铬编程技I:,夏‰骼r实现方法进行了棵耐 7IP.w.h 关键词嗅挺器,滑动窗口,'r(: ...
- linux 网关 优化,基于Linux的家庭网关优化.pdf
第 8卷 第 23期 2008年 12月 科 学 技 术 与 工 程 V01.8 No.23 Dec.2008 1671-1819(2008)23-6389-03 ScienceTechnologya ...
- linux集中器程序,基于Linux的抄表集中器软件设计与实现-电子与通信工程专业论文.docx...
基于Linux的抄表集中器软件设计与实现-电子与通信工程专业论文 华北电力大学硕士学位论文 华北电力大学硕士学位论文 I I 摘要 随着科技技术的进步和发展,居民生活用电量也快速增长,传统的人工抄表方 ...
- linux 无线 网桥,基于Linux无线网桥及无线网络设备驱动分析与研究
摘要: 综合了局域网,无线通信等相关技术的无线局域网(WLAN)是非常方便的数据传输系统,它利用射频技术遵循IEEE 802.11协议,具有传输速率高,成本低廉,兼容和扩展能力强等优点,是近些年来通信 ...
最新文章
- MySQL解压版安装
- 常见面试题:为什么HashMap不是线程安全的呢?(JDK1.7和JDK1.8角度)(看完你就能和面试官笑谈人生了)
- 在显著性区域外画矩形框matlab,Matlab实验报告样板
- Java 9 CompletableFuture 进化小脚步
- CV-机器视觉、图像处理方面的书籍
- mt4 指标 涨跌幅 颜色k线_Tick级别K线显示指标
- 狂赌智能手机 中国互联网巨头深陷零利润困局
- cacti linux cpu datasource,Cacti 0.8.8b 硬盘、网络流量、cpu、内存告警配置
- hadoop之DataBlockScanner
- 计算机算法设计与分析 单峰序列
- numpy.mean() in Python
- go set up on ubuntu
- vim个性化设置---给脚本文件加注释头信息
- QTP9 2自带的视频教程
- 【机器翻译machine translation】
- Erlang中的fun函数使用详解
- linux mysql 1055_mysql 1055错误
- matlab 卡丹 公式,卡丹公式是什么?请写出来,并用例题加以解释,
- dos脚本批量更改照片命名(文字变更数字)
- D.Interval
热门文章
- 最美的时间你遇见了谁
- Excel十个让你事半功倍的函数
- Java日历设计思路
- 计算机的资源管理器是电脑上的哪个图标,Win10资源管理器中“此电脑”光驱图标不见了怎么办?解决方法...
- 基于Python实现的简易微信系统
- PHP面试技巧——如何处理与面试官持不同观点这个问题?
- 解读:小比尔 · 福特认为特斯拉的成功并非因为马斯克
- CAD关闭图层快捷键,隐藏显示的CAD图层
- python笔记5 - 字符串格式化表达式,while语句嵌套,for循环,break,continue,死循环
- 解决Chrome谷歌浏览器Adobe Flash Player 插件已被屏蔽的问题