原理和用途
用途:用于不能及时处理数据而作为的缓存机制,例如消息队列,数据包等、
原理:没有环形的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