循环缓冲区的实现(纯C)

本文介绍了循环缓冲区在文件系统中的应用,作为FIFO队列的补充,它在生产者消费者问题中表现出色。文章详细讲解了循环缓冲区的定义,并提供了多线程读写测试的代码示例。
摘要由CSDN通过智能技术生成

循环缓冲区的用途

循环缓冲区主要用在文件系统中,和FIFO队列进行互补,特点是读写指针互不干扰,适用于经典的生产者消费者问题,相关原理已有相关博主解释。

循环缓冲区的定义

struct TRingBuf {
   
    char *buf;
    char *end_pos_;
    char *read_pos_;
    char *write_pos_;
    //int data_size_;
    int data_write_size_;
    int data_read_size_;
};
void TRingBufCreate(struct TRingBuf *self, void *buf, int buf_size);//construct
void TRingBufWrite(struct TRingBuf *self, void *data, int data_size);
void TRingBufRead(struct TRingBuf *self, void *buf, int buf_size);
void TRingBufClear(struct TRingBuf *self);//destruct
int TRingBufSize(struct TRingBuf *self);
int TRingBufFreeSize(struct TRingBuf *self);
int TRingBufDataSize(struct TRingBuf *self);

需要的头文件如下:

#include <string.h>
#include <stdlib.h>
#include <unistd.h>

循环缓冲区的实现

#include "c_cache.h"


void TRingBufCreate(struct TRingBuf *self, void *buf, int buf_size) {
   
    self->buf = (char*)buf;
    self->write_pos_ = (char*)buf;
    self->read_pos_ = (char*)buf;
    self->end_pos_ = (char*)buf + buf_size;
    //self->data_size_ = 0;
    self->data_read_size_ = 0;
    self->data_write_size_ = 0;
}

void TRingBufClear(struc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值