9.贝博betball网页数据结构_队列

betball贝博app Linux, 数据结构 262 次浏览 没有评论

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的幂次

静态方法

不太常用

  • DECLARE_KFIFO(name,size);
  • INIT_KFIFO(name);
  • 插入数据

    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();//删除该队列

    发表评论

    邮箱地址不会被公开。

    Go