环形缓冲区写多个数据到缓冲区示例代码
时间: 2024-03-04 07:48:42 浏览: 21
下面是一个基于C语言的环形缓冲区写入多个数据的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFFER_SIZE 1024
typedef struct {
char buffer[BUFFER_SIZE];
int head;
int tail;
} ring_buffer_t;
void ring_buffer_init(ring_buffer_t *rb)
{
rb->head = 0;
rb->tail = 0;
memset(rb->buffer, 0, BUFFER_SIZE);
}
int ring_buffer_write(ring_buffer_t *rb, const char *data, int length)
{
int available = BUFFER_SIZE - (rb->tail - rb->head);
if (length > available) {
length = available;
}
if (length > 0) {
int end = rb->tail % BUFFER_SIZE;
int space = BUFFER_SIZE - end;
int copy = length > space ? space : length;
memcpy(rb->buffer + end, data, copy);
memcpy(rb->buffer, data + copy, length - copy);
rb->tail += length;
}
return length;
}
int main()
{
ring_buffer_t rb;
ring_buffer_init(&rb);
char data1[] = "Hello, ";
char data2[] = "world!";
char data3[] = "This is a test.";
ring_buffer_write(&rb, data1, strlen(data1));
ring_buffer_write(&rb, data2, strlen(data2));
ring_buffer_write(&rb, data3, strlen(data3));
for (int i = 0; i < BUFFER_SIZE; i++) {
printf("%c", rb.buffer[(rb.head + i) % BUFFER_SIZE]);
}
printf("\n");
return 0;
}
```
这段代码定义了一个环形缓冲区数据结构`ring_buffer_t`,包含一个缓冲区数组`buffer`和头尾指针`head`和`tail`。`ring_buffer_init`函数用于初始化缓冲区,`ring_buffer_write`函数用于写入数据到缓冲区。在`main`函数中,我们定义了三个数据块,并分别写入缓冲区。最后,我们通过循环打印缓冲区中的数据,可以看到写入的三个数据块被正确地保存在了环形缓冲区中。