首先看一眼kfifo的结构体: struck fifo 我们主要关注上面几个带注释的变量。其它的主要是用于自定义数据类型的fifo的静态定义,各级宏展开比较复杂,这里就不分析了。如果能自己看懂这块代码,则可以证明……C语言掌握得不错。 4.2 内存申请 这个就是kfifo申请内存顺便初始化的过程。 __kfifo_alloc 我们看第31行,发现...
__kfifo_put是入队操作,它先将数据放入buffer里面,最后才修改in参数;__kfifo_get是出队操作,它先将数据从buffer中移走,最后才修改out。(确保即使in和out修改失败,也可以再来一遍) 你会发现in和out两者各司其职。下面是__kfifo_put和__kfifo_get的代码 unsignedint__kfifo_put(structkfifo *fifo,unsignedchar*b...
2 struct kfifo *kfifo_init(unsigned char *buffer, unsigned int size, 3gfp_t gfp_mask, spinlock_t *lock); 4 //给定size分配buffer和kfifo 5 struct kfifo *kfifo_alloc(unsigned int size, gfp_t gfp_mask, 6 spinlock_t *lock); 7 //释放kfifo空间 8 void kfifo_free(struct kfifo *fifo) 9...
//给定size分配buffer和kfifostructkfifo *kfifo_alloc(unsignedintsize, gfp_t gfp_mask, spinlock_t*lock);//释放kfifo空间voidkfifo_free(structkfifo *fifo); //向kfifo中添加数据unsignedintkfifo_put(structkfifo *fifo,constunsignedchar*buffer, unsignedintlen);//从kfifo中取数据unsignedintkfifo_get(struct...
kfifo就是这样的一类优美代码,它十分简洁,绝无多余的一行代码,却非常高效。 关于kfifo信息如下: 本文分析的原代码版本: 2.6.24.4 kfifo的定义文件: kernel/kfifo.c kfifo的头文件: include/linux/kfifo.h kfifo概述 kfifo是内核里面的一个First In First Out数据结构,它采用环形循环队列的数据结构来实现;它提供一...
如果对“Linux内核中的循环缓冲区”不是很了解的话,可以先参考 这里。内核中有关kfifo.c和kfifo.h两个文件的源码以及该问题的具体情况,可以查看这里。对于结构体内的in和out两个变量,内核是作如下处理的:1、在读入数据时增加in;2、在取出数据时增加out;3、当检测到两个相等的时候将它们复位归0。1和2不作...
1. kfifo.h头文件路径:kfifo.h头文件定义了kfifo数据结构及其相关函数,该头文件路径通常位于include/linux/kfifo.h。 2. kfifo.c源文件路径:kfifo.c文件实现了kfifo数据结构相关函数的具体操作,该源文件路径通常位于kernel/lib/kfifo.c。 3.驱动程序中的kfifo路径:在驱动程序中使用kfifo数据结构时,需要包含kfifo.h...
Linux内核通用队列实现称为kfifo 相关声明在文件<include/kfifo.h>中,相关定义在<kernel/kfifo.c>中 struct kfifo 以下代码来自:Linux2.6.22/include/kfifo.h struct kfifo { unsigned char *buffer; /* the buffer holding the data */ unsigned int size; /* the size of the allocated buffer */ ...
Linux内核数据结构之kfifo详解 本⽂分析的原代码版本: 2.6.24.4 kfifo的定义⽂件: kernel/kfifo.c kfifo的头⽂件: include/linux/kfifo.h kfifo是内核⾥⾯的⼀个First In First Out数据结构,它采⽤环形循环队列的数据结构来实现,提供⼀个⽆边界的字节流服务,并且使⽤并⾏⽆锁编程...
kfifo的定义文件:kernel/kfifo.c kfifo的头文件: include/linux/kfifo.h 1. kfifo概述 kfifo是内核里面的一个First In First Out数据结构,它采用环形循环队列的数据结构来实现;它提供一个无边界的字节流服务,最重要的一点是,它使用并行无锁编程技术,即当它用于只有一个入队线程和一个出队线程的场情时,两个线程...