Linux内核通用队列的使用笔记(读linux内核设计与实现)
Linux内核通用队列实现 Kfifo
位置:kernel/kififo.c
使用需要包含头文件#include <kernel/kififo>
1、创建队列(动态创建)
int kfifo_alloc(struct kififo *fifo , unsigned int size , gfp_t gfp_mask);
该函数会创建并初始化一个大小为size的fifo,内核使用gfp_mask标识分配队列。
成功返回0
ep :
struct kfifo fifo ;
int ret ;
//创建一个大小为PAGE_SIZE的队列,由内核进行内存分配
ret = kfifo_allo(&kifo , PAGE_SIZE , GFP_KERNEL);
if(ret)
return ret ;
自己分配缓冲,可以调用:
void kfifo_init(struct kfifo *kfifo ,void *buffer , unsigned int size);
创建并初始化一个kfifo对象,它将使由buffer指向的size字节大小的内存
对于以上两个函数,size必须是2的幂。
静态声明:
DECLARE_KFIFO(name , size);
INIT_KFIFO(name);
2、堆入队列数据
unsigned int kfifo_in(struct kfifo *fifo , const void *from , unsigned int len);
该函数将from指针所指的len字节的数据拷贝到fifo所指向的队列中,成功返回数据字节大小。
3、摘取队列数据
unsigned int kfifo_out_peek(struct kfifo *fifo , void *to , unsigned int len , unsigned offset);;
与kfifo_out类似,如果offset为0,则读队列头,参数offset指向队列中的索引位置。
4、获取队列长度
//返回存储kfifo队列的空间的总体大小
static inline unsigned int kififo_size(struct kfifo *fifo);
//返回队列中已堆入数据的大小
static inline unsigned int kfifo_len(struct kfifo *fifo);
//想得到kfifo队列中还有多少可用空间
static inline unsigned int kfifo_avail(struct kififo *fifo);
//判断队列是否为空,返回非0值,返回0则相反
static inline int kfifo_is_empty(struct kfifo *fifo);
//判断队列是否为满,返回非0值,返回0则相反
static inline int kfifo_is_full(struct kfifo *fifo);
5、重置和撤销队列
//抛弃所有队列中的内容,调用kfifo_reset();
static inline void kfifo_reset(struct kfifo *fifo);
//撤销一个还是用kfifo_alloc()分配的队列,调用kfifo_free();
使用举例:
unsigned int i ; //将0,31压如名为fifo的kfifo中 for(i = 0 ; i < 32 ; i++) kfifo_in(fifo , &i , sizeof(i)); unsigned int val ; int ret ; ret = kfifo_out_peek(fifo , &val , sizeof(val) , 0); if(ret != sizeof(val)) return -EINVAL ; printk(KERN_INFO"%u\n",val);//应该输出0 //摘取并打印kfifo中的所有元素,可以调用kfifo_out(); //当队列中还有数据时,按顺序从0到31打印出来 while(kfifo_avail(fifo)){ unsigned int ret ; int ret ; ret = kfifo_out(fifo,&val , sizeof(val)); if(ret != sizeof(val)) return -EINVAL ; printk(KERN_INFO"%u\n",val); }
Linux内核通用队列的使用笔记(读linux内核设计与实现)的更多相关文章
- Linux文件系统与inode、Block笔记
Linux文件系统与inode.Block笔记 在Linux下一切都是文件,无论是设备还是接口,亦或是网卡等均被抽象成了文件,并且有相关的内核代码进行调度.然而,在一切都是文件的前提下,最需要进行探讨 ...
- Linux内核入门到放弃-网络-《深入Linux内核架构》笔记
网络命名空间 struct net { atomic_t count; /* To decided when the network * namespace should be freed. */ a ...
- 读书笔记之Linux系统编程与深入理解Linux内核
前言 本人再看深入理解Linux内核的时候发现比较难懂,看了Linux系统编程一说后,觉得Linux系统编程还是简单易懂些,并且两本书都是讲Linux比较底层的东西,只不过侧重点不同,本文就以Linu ...
- 读书笔记2013-2 Linux内核设计与实现A
读书笔记2013-2 Linux内核设计与实现A <Linux内核设计与实现> 简介 这本书不是想Linux源码剖析那样一行行分析Linux源代码的书,而是从Linux历史,Linux哲学 ...
- Linux内核学习笔记2——Linux内核源码结构
一 内核组成部分 内核是一个操作系统的核心,主要由五个部分组成:进程调度,内存管理,虚拟文件系统,网络结构,进程间通信. 1.进程调度(SCHED) 控制进程对CPU的访问.当需要选择下一个进程运行时 ...
- 《Linux内核设计与实现》学习笔记之“Linux进程管理机制”
一.进程(或者称为“任务”)简介 进程是OS最基本的抽象之一,通常进程包括“可执行程序代码”,“其他资源”(如:打开的文件,挂起的信号,内核内部数据,处理器状态,地址空间,一个或多个执行线程等) 二. ...
- linux内核分析第四周学习笔记
linux内核分析第四周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...
- Linux内核分析第二周学习笔记
linux内核分析第二周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...
- linux内核分析第一周学习笔记
linux内核分析第一周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...
随机推荐
- 20160218.CCPP体系详解(0028天)
程序片段(01):加法.c 内容概要:字符串计算表达式 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <st ...
- 关于在arm裸板编程时使用printf问题的解决方法
在ARM裸板驱动编程中,是不允许程序直接调用C库程序的.为什么呢?因为此时kernel还没有被加载,所以在封装在kernel层的C库的API是用不了的,那怎么办? 在开发过程中,printf的功能我不 ...
- ROS_Kinetic_29 kamtoa simulation学习与示例分析(一)
致谢源代码网址:https://github.com/Tutorgaming/kamtoa-simulation kamtoa simulation学习与示例分析(一) 源码学习与分析是学习ROS,包 ...
- Studio 一些使用
1,配置: W:\android_tools\AndroidStudio2.1.3_SDK\android-studio-ide-141.2456560-windows\android-studio\ ...
- 开源框架Volley的使用《二》[NetWorkImageView&&LruCache&ImageLoader]
转载本专栏每一篇博客请注明转载出处地址,尊重原创.此博客转载链接地址:小杨的博客 http://blog.csdn.net/qq_32059827/article/details/5278849 ...
- Java程序员必须掌握的线程知识-Callable和Future
Callable和Future出现的原因 创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口. 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果. 如果需 ...
- 3.关于QT中的MainWindow窗口,MenuBar,ToolBar,QuickTip等方面的知识点
1 新建一个空Qt项目 编写12MainWindow.pro HEADERS += \ MyMainWindow.h \ MyView.h SOURCES += \ MyMainWindow.c ...
- Android View框架总结(八)ViewGroup事件分发机制
请尊重分享成果,转载请注明出处: http://blog.csdn.net/hejjunlin/article/details/52298780 上篇分析了View的事件分发流程,留了一个问题:如果上 ...
- 1.3、Android Studio创建一个Android Library
一个Android Library结构上与Android app模块相同.它可以包含构建一个app需要的所有东西,包括圆满,资源文件和AndroidManifest.xml.然而,并非编译成运行在设备 ...
- Java Math的 floor,round和ceil
floor 返回不大于的最大整数 round 则是4舍5入的计算,入的时候是到大于它的整数 round方法,它表示"四舍五入",算法为Math.floor(x+0.5),即将原来的 ...