用c语言,写一个,基于字符数组的FIFO先入先出的缓存函数,可以在内核中使用
时间: 2023-03-23 07:02:18 浏览: 97
好的,以下是基于C语言的FIFO缓存函数的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct {
int arr[MAX_SIZE];
int head, tail;
} fifo;
// 初始化FIFO缓存
void init_fifo(fifo *q) {
q->head = q->tail = 0;
}
// 向FIFO缓存中添加元素
void push(fifo *q, int val) {
if (q->tail >= MAX_SIZE) {
printf("FIFO已满!\n");
return;
}
q->arr[q->tail++] = val;
}
// 从FIFO缓存中取出元素
int pop(fifo *q) {
if (q->head == q->tail) {
printf("FIFO已空!\n");
return -1;
}
int res = q->arr[q->head];
q->head++;
return res;
}
int main() {
fifo q;
init_fifo(&q);
push(&q, 1);
push(&q, 2);
push(&q, 3);
push(&q, 4);
push(&q, 5);
printf("%d\n", pop(&q));
printf("%d\n", pop(&q));
printf("%d\n", pop(&q));
printf("%d\n", pop(&q));
printf("%d\n", pop(&q));
printf("%d\n", pop(&q)); // 内部缓存已空,pop操作将返回-1
return 0;
}
```
以上代码实现了一个FIFO缓存,内部使用数组来存储数据,头指针`head`和尾指针`tail`分别指向队列的头部和尾部。`push`函数将数据添加到尾部,`pop`函数从头部取出数据,如果队列已空则返回-1。在程序中,我们先调用`init_fifo`函数初始化队列,然后添加了5个元素,最后逐个取出。
阅读全文