基于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语言代码相关推荐

  1. linux手机+华为,基于Linux打造,华为重磅宣布,开始在6款手机测试新系统

    原标题:基于Linux打造,华为重磅宣布,开始在6款手机测试新系统 全球智能手机的发展已经来到了十字路口,技术瓶颈越来越明显.有数据显示,苹果iphone手机的销量依然在下滑,没有很大的起色,这表明消 ...

  2. linux电机驱动程序,基于Linux系统的HHARM9电机驱动程序设计

    电子科学知识.电机,arm 第24卷 第4期 2005年12月南昌工程学院学报JournalofNanchangInstituteofTechnologyVol.24No.4Dec.2005文章编号: ...

  3. linux电子相册程序,基于Linux电子相册的

    基于Linux电子相册的 (18页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.9 积分 本科毕业论文(设计) 题目: 基于Linux电子相册的 ...

  4. linux设备资源分配,基于Linux 简化 AMP 配置使其更方便更动态地分配资源

    描述 嵌入式系统一般分为两大类:需要硬实时性能的:和不需要硬实时性能的.过去,我们不得不做出艰难抉择: 选择实时操作系统的性能还是我们钟爱的 Linux 系统的丰富特性,然后努力弥补不足之处? 如今, ...

  5. 基于linux的 设计,基于Linux的智能家居的设计(一)

    本课题主要目的是设计和实现一个基于Linux开发平台的智能家居系统.本系统主要使用PVC板做成的家居模型.本系统硬件使用基于ARM架构的samsung S3C6410芯片做成的OK6410开发板为手持 ...

  6. 基于linux环境pdf,基于Linux环境下的Snif论r设计与芸}瑰.PDF

    基于Linux环境下的Snif论r设计与芸}瑰 基于Linux环境下的Snif论r设计与芸}瑰 李刍每莹周姆 铬编程技I:,夏‰骼r实现方法进行了棵耐 7IP.w.h 关键词嗅挺器,滑动窗口,'r(: ...

  7. linux 网关 优化,基于Linux的家庭网关优化.pdf

    第 8卷 第 23期 2008年 12月 科 学 技 术 与 工 程 V01.8 No.23 Dec.2008 1671-1819(2008)23-6389-03 ScienceTechnologya ...

  8. linux集中器程序,基于Linux的抄表集中器软件设计与实现-电子与通信工程专业论文.docx...

    基于Linux的抄表集中器软件设计与实现-电子与通信工程专业论文 华北电力大学硕士学位论文 华北电力大学硕士学位论文 I I 摘要 随着科技技术的进步和发展,居民生活用电量也快速增长,传统的人工抄表方 ...

  9. linux 无线 网桥,基于Linux无线网桥及无线网络设备驱动分析与研究

    摘要: 综合了局域网,无线通信等相关技术的无线局域网(WLAN)是非常方便的数据传输系统,它利用射频技术遵循IEEE 802.11协议,具有传输速率高,成本低廉,兼容和扩展能力强等优点,是近些年来通信 ...

最新文章

  1. MySQL解压版安装
  2. 常见面试题:为什么HashMap不是线程安全的呢?(JDK1.7和JDK1.8角度)(看完你就能和面试官笑谈人生了)
  3. 在显著性区域外画矩形框matlab,Matlab实验报告样板
  4. Java 9 CompletableFuture 进化小脚步
  5. CV-机器视觉、图像处理方面的书籍
  6. mt4 指标 涨跌幅 颜色k线_Tick级别K线显示指标
  7. 狂赌智能手机 中国互联网巨头深陷零利润困局
  8. cacti linux cpu datasource,Cacti 0.8.8b 硬盘、网络流量、cpu、内存告警配置
  9. hadoop之DataBlockScanner
  10. 计算机算法设计与分析 单峰序列
  11. numpy.mean() in Python
  12. go set up on ubuntu
  13. vim个性化设置---给脚本文件加注释头信息
  14. QTP9 2自带的视频教程
  15. 【机器翻译machine translation】
  16. Erlang中的fun函数使用详解
  17. linux mysql 1055_mysql 1055错误
  18. matlab 卡丹 公式,卡丹公式是什么?请写出来,并用例题加以解释,
  19. dos脚本批量更改照片命名(文字变更数字)
  20. D.Interval

热门文章

  1. 最美的时间你遇见了谁
  2. Excel十个让你事半功倍的函数
  3. Java日历设计思路
  4. 计算机的资源管理器是电脑上的哪个图标,Win10资源管理器中“此电脑”光驱图标不见了怎么办?解决方法...
  5. 基于Python实现的简易微信系统
  6. PHP面试技巧——如何处理与面试官持不同观点这个问题?
  7. 解读:小比尔 · 福特认为特斯拉的成功并非因为马斯克
  8. CAD关闭图层快捷键,隐藏显示的CAD图层
  9. python笔记5 - 字符串格式化表达式,while语句嵌套,for循环,break,continue,死循环
  10. 解决Chrome谷歌浏览器Adobe Flash Player 插件已被屏蔽的问题