时间窗口和buff c语言,c语言图文详解 实现ringbuff 源码详解

本文详细介绍了C语言如何实现环形缓冲区(ringbuff),包括ringbuff的优点、创建、数据写入、读取以及删除等关键步骤,并提供了相应的源码解析。通过对ringbuff结构体的定义和各个功能函数的实现,展示了ringbuff在处理数据读写上的高效和灵活性。
摘要由CSDN通过智能技术生成

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(已写入长度);基本的工作原理就是这样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值