环形buffer具体实现代码

原理和用途

用途:用于不能及时处理数据而作为的缓存机制,例如消息队列,数据包等、

原理:没有环形的buffer,内存都是线性的,是从逻辑上把它处理成环形,这样后面的数据就可以覆盖前面的数据,并且不用频繁的去申请内存,先进先出

实现方式: 需要申请一块内存,并且有4个记录位置的指针,
read_start 和 write_end , 记录读写的开始和结束位置,
read_start_tmp 和 write_end_tmp记录操作时的临时位置

实现代码

头文件

#ifndef MIRRORRINGBUFFER_H_
#define MIRRORRINGBUFFER_H_

#define CIRCLE_BUFFER_SIZE_DEFAULT 1024*1000*3

/* Circular buffer object */
typedef struct
{
    unsigned int size; /* maximum number of elements           */
    unsigned int read_start; /* index of oldest element              */
    unsigned int read_start_tmp;
    unsigned int write_end; /* index at which to write new element  */
    unsigned int write_end_tmp;
    int w_msb;  /*flag about full or empty*/
    unsigned char  *data; /* vector of elements                   */
} CircularBuffer;

typedef enum
{
    READ_WRITE_CAN,
    WRITE_ONLY,
    READ_ONLY,
}READ_WRITE_FLAG;


extern int cbInit(CircularBuffer *cb, unsigned int size);
extern int cbIsFull(CircularBuffer *cb);
extern int cbIsEmpty(CircularBuffer *cb);
extern int cbWrite(CircularBuffer *cb, unsigned char *elem, unsigned int length);
extern int cbReadData(CircularBuffer *cb, unsigned char *outelem, unsigned int length);
extern int cbReadhead(CircularBuffer *cb,unsigned int *datalenth);

#endif /* MIRRORRINGBUFFER_H_ */

用结构体CircularBuffer赋值一个变量,使用cbInit 初始化,其中size是你要申请的内存大小

C文件

/*
 * mirrorringbuffer.c
 *
 *  Created on: 2013-7-17
 */
#include <st
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值