c语言图文详解 实现ringbuff 源码详解
c语言图文详解 实现ringbuff 源码详解
[var1]
ringbuff是环形buff,是buff缓存的一种,可以用来存放程序运行过程的暂时数据。一般的buff即是一个数组,而环形buff就是将数组的头和尾链接起来的数组。
老规矩,源码先放这:
码云:https://gitee.com/killerp/ringbuff.git
github :https://github.com/killer-p/ringbuff.git
1,ringbuff的优点
ringbuff比普通的buff使用更加高效灵活,可以边读数据边写数据。
[var1]
一个ringbuff的实现至少需要以下四个功能:
创建ringbuff
数据写入ringbuff
从ringbuff读取数据
删除ringbuff
0,ringbuff结构体
typedef struct RingBuff *RingBuff_handle;
//ringbuff结构体
struct RingBuff
{
unsigned char *source;//ringbuff的头部
unsigned char *tail;//尾部
unsigned char *write;//写指针
unsigned char *read;//读指针
int size;//ringbuff总长度
int writed_size;//写入数据的长度
int remain_size;//剩余空间
};
如下图所示,一般一个ringbuff创建后,size,source和tail指针是固定的。当write移动到tail时,如果有数据需要写入,write会移动到source处继续写入,但是write不会覆盖掉未被read指针读取的数据。当read移动到tail时同样,如果需要继续读取数据,会移动到source继续读取。注意!write移动的长度不能超过remain_size(剩余空间);read移动的长度部能超过write_size(已写入长度);基本的工作原理就是这样。