内核中实现了常用的几种数据结构,这里是他们的api文档。
kfifo先进先出缓冲区定义于common/kfifo.h
中。您可以使用它,创建指定大小的fifo缓冲区(最大大小为4GB)
int kfifo_alloc(struct kfifo_t *fifo, uint32_t size, uint64_t reserved)
通过动态方式初始化kfifo缓冲队列。fifo缓冲区的buffer将由该函数进行申请。
fifo
kfifo队列结构体的指针
size
缓冲区大小(单位:bytes)
reserved
当前字段保留,请将其置为0
当返回值为0时,表示正常初始化成功,否则返回对应的errno
void kfifo_init(struct kfifo_t *fifo, void *buffer, uint32_t size)
使用指定的缓冲区来初始化kfifo缓冲队列
fifo
kfifo队列结构体的指针
buffer
缓冲区基地址指针
size
缓冲区大小(单位:bytes)
void kfifo_free_alloc(struct kfifo_t* fifo)
释放通过kfifo_alloc创建的fifo缓冲区. 请勿通过该函数释放其他方式创建的kfifo缓冲区。
fifo
kfifo队列结构体的指针
uint32_t kfifo_in(struct kfifo_t *fifo, const void *from, uint32_t size)
向kfifo缓冲区推入指定大小的数据。当队列中空间不足时,则不推入数据。
fifo
kfifo队列结构体的指针
from
源数据基地址指针
size
数据大小(单位:bytes)
返回成功被推入的数据的大小。
uint32_t kfifo_out(struct kfifo_t *fifo, void *to, uint32_t size)
从kfifo缓冲区取出数据,并从队列中删除数据。当队列中数据量不足时,则不取出。
fifo
kfifo队列结构体的指针
to
目标缓冲区基地址指针
size
数据大小(单位:bytes)
返回成功被取出的数据的大小。
uint32_t kfifo_out_peek(struct kfifo_t *fifo, void *to, uint32_t size)
从kfifo缓冲区取出数据,但是不从队列中删除数据。当队列中数据量不足时,则不取出。
fifo
kfifo队列结构体的指针
to
目标缓冲区基地址指针
size
数据大小(单位:bytes)
返回成功被取出的数据的大小。
kfifo_reset(fifo)
忽略kfifo队列中的所有内容,并把输入和输出偏移量都归零
fifo
kfifo队列结构体的指针
kfifo_reset_out(fifo)
忽略kfifo队列中的所有内容,并将输入偏移量赋值给输出偏移量
fifo
kfifo队列结构体的指针
kfifo_total_size(fifo)
获取kfifo缓冲区的最大大小
fifo
kfifo队列结构体的指针
缓冲区最大大小
kfifo_size(fifo)
获取kfifo缓冲区当前已使用的大小
fifo
kfifo队列结构体的指针
缓冲区当前已使用的大小
kfifo_empty(fifo)
判断kfifo缓冲区当前是否为空
fifo
kfifo队列结构体的指针
情况 | 返回值 |
---|---|
空 | 1 |
非空 | 0 |
kfifo_full(fifo)
判断kfifo缓冲区当前是否为满
fifo
kfifo队列结构体的指针
情况 | 返回值 |
---|---|
满 | 1 |
不满 | 0 |