当前位置: 首页 > news >正文

移动网站开发试验报告网站首页导航栏怎么做

移动网站开发试验报告,网站首页导航栏怎么做,东莞网站建设流程,房地产项目网站建设方案令牌桶实例 令牌桶三要素 cps 每秒钟传输字节数 burst 令牌桶内最多能传输的字节数,token的最大值 token 令牌的个数 之前是一个令牌(token)对应一个字节,现在将一个token变为一个cps,cps是解码速率,每攒到一个令牌&#xff…

令牌桶实例

令牌桶三要素

cps 每秒钟传输字节数

burst 令牌桶内最多能传输的字节数,token的最大值

token 令牌的个数

之前是一个令牌(token)对应一个字节,现在将一个token变为一个cps,cps是解码速率,每攒到一个令牌,就token+=cps

不同的速率使用不同的令牌桶,将令牌桶存储在一个数组中。

代码

mytbf.h

#ifndef MYTBF__H_
#define MYTBF__H_#define MYTBF_MAX	1024
typedef void mytbf_t;mytbf_t *mytbf_init(int cps,int burst);int mytbf_fetchtoken(mytbf_t * ,int);int mytbf_returntoken(mytbf_t * ,int );int mytbf_destroy(mytbf_t *);#endif

mytbf.c

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <signal.h>#include "mytbf.h"typedef void (*sighandler_t)(int);//将令牌桶的数据结构存在数组中
static struct mytbf_st * job[MYTBF_MAX];
static int inited = 0;
#define MIN(A,B) (A < B ? A : B)
static sighandler_t alrm_handler_save;/*每个token代表一个字节,cps代表解码速率,burst应该是cps的倍数,token=token+cps*/
//这是令牌桶的数据结构,这个数据结构存在数组中
struct mytbf_st 
{int cps;	//每秒钟传输的字节数int burst;	//令牌桶中令牌最大数量int token;	//令牌的个数int pos;	//记录令牌桶在数组的位置下标
};//信号捕捉函数
static void alrm_handler(int s)
{alarm(1);//为数组中的令牌桶中的令牌做累计for(int i = 0;i < MYTBF_MAX; i++){if(job[i] != NULL){job[i]->token += job[i]->cps;if(job[i]->token > job[i]->burst)job[i]->token = job[i]->burst;}}
}
//关闭时钟发送信号,恢复
static void module_unload(void)
{int i;//恢复SIGALRM到之前的功能signal(SIGALRM,alrm_handler_save);//取消时钟发送信号alarm(0);//释放令牌桶for(i = 0;i < MYTBF_MAX;i++){free(job[i]);}}
//第一次发时钟信号的函数
static void module_load(void)
{//signal的返回值是注册新的行为之前的行为alrm_handler_save = signal(SIGALRM,alrm_handler);alarm(1);//注册钩子函数,这个不是函数调用,而是当调用exit的时候才会调用atexit(module_unload);
}static int get_free_pos(void)
{int i = 0;for(i = 0;i < MYTBF_MAX; i++){if(job[i] == NULL)return i;}return -1;
}mytbf_t *mytbf_init(int cps,int burst)
{int pos = 0;struct mytbf_st *me;//在数组中找到空位下标pospos = get_free_pos();if(pos < 0){return NULL;}if( !inited ){module_load();inited = 1;}me = malloc(sizeof(*me));if(me == NULL){return NULL;}//初始化令牌桶结构体成员me->token = 0;me->cps = cps;me->burst = burst;me->pos = pos;//将令牌桶放到数组中job[pos] = me;return me;
}//取令牌
int mytbf_fetchtoken(mytbf_t *ptr ,int size)
{int n;struct mytbf_st *me = ptr;if(size <= 0)return -1;while(me->token <= 0)pause();//当要取的令牌数大于最大令牌数量,给最大令牌数量n = MIN(me->token,size);me->token -=n;return n;}//归还令牌
int mytbf_returntoken(mytbf_t *ptr ,int size)
{struct mytbf_st *me = ptr;if(size <=0 )return -1;me->token +=size;if(me->token > me->burst)me->token = me->burst;return size;
}//销毁令牌桶
int mytbf_destroy(mytbf_t *ptr)
{	//因为mytbf_t 是void类型,转换下struct mytbf_st *me = ptr;job[me->pos] = NULL;free(me);return 0;
}

main.c

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <signal.h>
#include <errno.h>
#include "mytbf.h"#define CPS	    10
#define BUFSIZE	1024
#define BURST   100int main(int argc,char**argv)
{int sfd,dfd = 1;int size,errnor;char buf[BUFSIZE];int len,ret,pos;mytbf_t * tbf;if(argc < 2){fprintf(stderr,"Usage ....\n");exit(1);}//初始化令牌桶tbf = mytbf_init(CPS,BURST);//打开要读取的文件do{sfd = open(argv[1],O_RDONLY);if(sfd < 0){if(errno != EINTR){perror("open()");exit(1);}}}while(sfd < 0);while(1){size = mytbf_fetchtoken(tbf,BUFSIZE);if(size < 0){fprintf(stderr,"mytbf_fetchtoken is error\n");exit(1);}while((len = read(sfd,buf,size)) < 0){if(errno == EINTR)continue;perror("read()");break;}if(len == 0)break;//判断令牌是否用完if(size - len > 0)mytbf_returntoken(tbf,size-len);pos = 0;//使用循环读,因为是向终端写while(len > 0){ret = write(dfd,buf+pos,len);if(ret < 0){	//假错,继续读if(ret == EINTR)continue;perror("write()");exit(1);}pos += ret;len -= ret;}}mytbf_destroy(tbf);exit(0);
}

makefile

all:mytbf
mytbf:main.o mytbf.ogcc $^ -o $@
clean:rm *.o mytbf
http://www.15wanjia.com/news/190469.html

相关文章:

  • 广州做网站那家好seo网站优化平台
  • 电视剧在线观看完整版免费网站程序编程软件有哪些
  • 温州cms模板建站行业网站建设公司
  • 企业官方网站怎么建设二类电商用网站怎么做H5页面
  • 郑州有做彩票网站的吗电子商务网站设计思路
  • 珠海高端网站设计设计师网名名字
  • 电子工程网网站一个专门做ppt的网站
  • asp.net网站开发菜鸟城市生活服务app下载
  • 网站友链外链网站设计画布规范1680
  • 乐昌市建设网站长沙如何做网站
  • 做个网站多少钱 百度能查到的腾讯微校怎么做微网站
  • 激励案例网站制作云龙网站开发
  • 资源库网站开发网站设计影响seo的因素
  • 成都网站制作成都网站制作西安市城乡建设管理局网站的公示栏6
  • 网页设计网站模板中山网站建设外包
  • 科技公司网站开发模拟建筑
  • 携程旅行网站建设求一个能用的网址
  • 中国建设银行贷款网站客户管理系统服务
  • 网站建设运行工作情况总结软件开发公司规章制度
  • 襄阳市建设公司网站网站不备案不能用吗
  • 室内设计师第一网站开发公司房价制定
  • 上海seo网站建设软件研发过程管理
  • 外贸企业网站建设哪家好国内4g无法登录Wordpress
  • 阿里巴巴网站服务器成本做网站需要学什么
  • 莆田企业自助建站系统效果图网站无缝连接
  • 温州门户网站建设莞城短视频seo优化
  • 网站名称怎么变更wordpress页面如何设置新窗口
  • 门户网站盈利模式wordpress中文版源码
  • 网站截图可以做凭证吗留言网站怎么做
  • 自己做的网站如何联网一个叫mit做app的网站