kfifo
linux内核通用队列成为kfifo,在kernel/kfifo.c中
kfifo维护了两个偏移量,入口偏移(下一次入队列的位置)和出口偏移(下一次出队列的位置),出口偏移总是小于等于入口偏移,否则无意义,因为代表还没有元素入队列。
创建队列
动态方法
int kfifo_alloc(fifo, size, gfp_mask)
创建并初始化一个大小为size的kfifo,内核使用gfp_mask标识分配队列
kfifo_init(fifo, buffer ,size)
可以自己分配缓冲,使用由buffer指向的size字节大小的内存
以上两个函数的size均必须为2的幂次
静态方法
不太常用
插入数据
kfifo_in(fifo, buf, n)
将buf所指的n字节拷贝到fifo队列中
出队
kfifo_out(fifo ,to ,len)
该函数执行完毕后,队列中将删除这一个数据
kfifo_out_peek(fifo,to,len,offset)
该函数和kfifo_out类似,但出口偏移不增加,offset指向队列中索引的位置。可以直接查看数据
获取队列长度
kfifo_size(fifo);//队列总体空间大小
kfifo_len(fifo);//队列已推入数据的大小
kfifo_avail(fifo);//队列剩余空间大小
kfifo_is_empty(fifo);
kfifo_is_full();
重置队列
kfifo_reset();//抛弃所有内容
撤销队列
kfifo_free();//删除该队列