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