环形缓冲区实现(C语言)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


要求

完成环形缓冲区函数库封装,生成成静态库和动态库,编写测试程序验证库文件,编写makefile实现编译,要求实现函数:
a、缓冲区初始化
b、往缓冲区写数据;
c、从缓冲区读数据;
d、计算缓冲区数据长度;
e、销毁缓冲区;

需要考虑到多个用户同时读写的情况,用到锁机制(互斥量)。

一、环形缓冲区

关于什么是环形缓冲区,这里就不介绍了,网上大量文章都会介绍,读几篇基本就了解了。
参考:
C语言实现环形缓冲区
环形缓冲区ring_buffer的c语言实现
【数据结构及算法】环形缓冲区(ring buffer)实现原理及代码实现(C语言)

不罗嗦,直接上代码。

二、环形缓冲区实现(C语言)

1. ringBuf.h

#ifndef _RINGBUF_H
#define _RINGBUF_H

#define read    0
#define write   1
#define quit    2
#define length  3

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

struct ringBuf
{
   
	char *buffer;	/*缓冲区的数据*/
	int  size;		/*缓冲区大小*/
	int  pRead;		/*读指针,名义上的指针,只是为了记录位置而已*/
	int  pWrite;	/*写指针,名义上的指针,只是为了记录位置而已*/
};
/*先不考虑互斥锁*/
/*先不考虑写覆盖和读重复问题,后续设计有效数据记录变量来解决*/

struct ringBuf *ringBufInit(struct ringBuf *ringBuffer,int size);
int ringBufRead(struct ringBuf *ringBuffer,char *readBuf,int readLength);
int ringBufWrite(struct ringBuf *ringBuffer,char *writeBuf,int writeLength);
int ringBufDataLen(struct ringBuf *ringBuffer);
void ringBufFree(struct ringBuf *ringBuffer);
int cmdHand(char *cmd);

#endif

2. ringBufInit.c

#include "ringBuf.h"
#include <stdlib.h>

/*环形缓冲区初始化函数*/
/*不使用全局变量,将环形缓冲区结构体返回*/
struct ringBuf *ringBufInit(struct ringBuf* ringBuffer,int size)
{
   
	ringBuffer = (struct ringBuf*)malloc(sizeof(struct ringBuf));
	if(NULL == ringBuffer)
	{
   
		printf("ringBuffer malloc error!\n");
		exit(-1);
	}
	memset(ringBuffer,0,sizeof(struct ringBuf));
	
	ringBuffer->buffer = (char*)malloc(size);
	memset(ringBuffer->buffer,0,size);

	ringBuffer->size   = size;
	ringBuffer->pRead  = 0;
	ringBuffer->pWrite = 0;

	return ringBuffer;
}

3. ringBufRead.c

#include "ringBuf.h"

/*从环形缓冲区读数据*/

int ringBu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值