# 内核数据结构   内核中实现了常用的几种数据结构,这里是他们的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 |