请用C语言编写 3个buffer轮流接收长度为20的数据 提取数据时先进先出
时间: 2023-11-22 20:56:36 浏览: 22
以下是一个简单的示例代码,使用了三个长度为20的数组作为缓冲区,通过循环将数据依次存入三个缓冲区中,然后使用先进先出的方式提取数据:
```c
#include <stdio.h>
#include <string.h>
#define BUF_SIZE 20
#define BUF_NUM 3
int main() {
char buffer[BUF_NUM][BUF_SIZE + 1]; // 加 1 是为了留出字符串结束符的空间
int buf_idx = 0; // 当前使用的缓冲区索引
int data_idx = 0; // 当前缓冲区中已存储的数据索引
while (1) {
// 模拟从外部读取数据
char data[BUF_SIZE + 1];
printf("Enter data (max %d characters): ", BUF_SIZE);
fgets(data, BUF_SIZE + 1, stdin);
// 将数据存入当前缓冲区
strncpy(buffer[buf_idx] + data_idx, data, BUF_SIZE - data_idx);
data_idx += strlen(data);
// 如果当前缓冲区已满,切换到下一个缓冲区
if (data_idx == BUF_SIZE) {
buf_idx = (buf_idx + 1) % BUF_NUM;
data_idx = 0;
}
// 提取数据时先进先出,从当前缓冲区开始
int i;
for (i = buf_idx; i < BUF_NUM; i++) {
printf("Data in buffer %d: %s\n", i, buffer[i]);
}
for (i = 0; i < buf_idx; i++) {
printf("Data in buffer %d: %s\n", i, buffer[i]);
}
}
return 0;
}
```
以上代码假设每次从外部读取的数据不会超过20个字符,如果需要支持更大的数据块,可以相应地调整缓冲区大小。同时,如果需要在多个线程中使用这些缓冲区,需要添加适当的同步机制以避免竞态条件。