前言
Linux内核实现了以下常用的内建数据结构,主要有:
链表
队列
映射
二叉树
今天详细学习一下队列的知识,内核中的队列是以字节形式保存数据的,所以获取数据的时候,需要知道数据的大小。Linux内核通用队列实现称为kfifo。
kfifo
提供了两个主要操作:enqueue(入队列)和dequeue(出队列)。kfifo对象维护两个偏移量:入口偏移和出口偏移。入口偏移就是下次入队列时的位置,出口偏移就是下一次出队列时的位置。出口偏移总是小于等于入口偏移,否则无意义。
struct kfifo {
unsigned char *buffer; //the buffer holding the data
unsigned int size; //the size of the allocated buffer
unsigned int in; //data is add