×

linux2.6内核设备驱动模型精华

消耗积分:0 | 格式:doc | 大小:677KB | 2017-04-26

vistal元淼

分享资料个

linux 内核驱动部分详解

linux内核部件分析(一)——连通世界的list

在linux内核中,有一种通用的双向循环链表,构成了各种队列的基础。链表的结构定义和相关函数均在include/linux/list.h中,下面就来全面的介绍这一链表的各种API。

struct list_head {

struct list_head *next, *prev;

};

这是链表的元素结构。因为是循环链表,表头和表中节点都是这一结构。有prev和next两个指针,分别指向链表中前一节点和后一节点。

#define LIST_HEAD_INIT(name) { &(name), &(name) }

#define LIST_HEAD(name) \

struct list_head name = LIST_HEAD_INIT(name)

static inline void INIT_LIST_HEAD(struct list_head *list)

{

list-》next = list;

list-》prev = list;

}

在初始化的时候,链表头的prev和next都是指向自身的。

static inline void __list_add(struct list_head *new,

struct list_head *prev,

struct list_head *next)

{

next-》prev = new;

new-》next = next;

new-》prev = prev;

prev-》next = new;

}

static inline void list_add(struct list_head *new, struct list_head *head)

{

__list_add(new, head, head-》next);

}

static inline void list_add_tail(struct list_head *new, struct list_head *head)

{

__list_add(new, head-》prev, head);

}

双向循环链表的实现,很少有例外情况,基本都可以用公共的方式来处理。这里无论是加第一个节点,还是其它的节点,使用的方法都一样。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !