C实现一个环回缓冲区,ring buffer

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

#define  BUF_CNT  64
char buf[BUF_CNT]={0};

typedef struct 
{
	char *buffer;
	int in;
	int out;
	int cnt;
	int size;
}RING_BUFFER_Typedef;

void ring_buffer_init(RING_BUFFER_Typedef *ring, char *buffer, int len)
{
	ring->buffer = buffer;
	ring->in = 0;
	ring->out = 0;
	ring->cnt = 0;
	ring->size=len;
}

void ring_buffer_in(RING_BUFFER_Typedef *ring, char c)
{
	if(ring->cnt>=ring->size)
	{
		ring->out++;
		if(ring->out==ring->size) ring->out=0;
	}
	else
	{
		ring->cnt++;
	}
	if(ring->in>=ring->size) ring->in=0;
	ring->buffer[ring->in] = c;
	ring->in++;
}

int ring_buffer_out(RING_BUFFER_Typedef *ring, char *c)
{
	if(ring->cnt>0)
	{
		if(ring->out>=ring->size) ring->out=0;
		*c = ring->buffer[ring->out];
		ring->out++;
		ring->cnt--;
		return 0;
	}
	return -1;
}

int main()
{
	RING_BUFFER_Typedef ring;
	char i = 0;
	char c;
    ring_buffer_init(&ring, buf, BUF_CNT);
	while(1)
	{
		for(i=0;i<125;i++)
			ring_buffer_in(&ring, i);
		for(i=0;i<BUF_CNT;i++)
		{
			if(ring_buffer_out(&ring, &c)==0)
			{
				printf("%02x\r\n", c);
			}
		}
		break;
	}
}
posted @ 2024-03-08 14:20  曾锋  阅读(84)  评论(0)    收藏  举报