Linux 驱动中常用的数据结构

        但凡阅读过Linux内核代码的工程师都有一个概念,Linux内核遍布着各种各样的链表结构。Tasklets、Workqueue、Hash、目录树等地方都用到数据链表。可以认为是Linux内核最重要的数据结构之一,Linux内部就是由。本文顺序介绍Linux链表结构,以及Tasklets、WorkQueue等。

    

       一、链表类型: 链表类型包括单链表、双链表和循环链表。

               1、单链表:

                                                            

                                                                                                                        图 1

                如上图所示,单链表指的是一个链表指针头指向一个数据结构的指针区,最后一个指针 == NULL。链表头的数据结构类型和指针区的结构一样,具体的说明见下面的

         Linux链表结构。

 

             2、双链表:

                                                                                

                                                                                                                   图 2

                   如上图所示,双链表指针的每个指针区的Next都是指向下一个结构的指针区,而下一个的pre指针都是指向上一个指针。在双链表指针最后一个指针Next等于NULL

 

                3、循环链表:

                   循环链表如图2所示,把其中虚线部分加入其中的时候就是一个循环的双向链表。循环链表指的是链表的头和结尾都进行相连。

 

        二、Linux链表

               Linux内核数据结构中采用的大多数都是双向循环链表。内核中提供和许多链表操纵和单个数据结构的操作函数,下面就分别介绍一下Linux链表操作和单个数据结构的

          操作。

               1、链表指针所在数据结构及其操作函数:

                    Linux数据结构中的链表建立是通过在每个数据结构中插入一个list_head指针结构,list_head如下所示:

                   struct list_head
                   {
                          struct list_head *pre;                               // 指向前级的指针
                          struct list_head *next;                              // 指向后级的指针
                   };

                   带上数据区的数据结构是在数据当中插入这样的指针结构,比如有一个数据区为my_data,其结构如下:

                  struct my_data

                  {

                          int data1;

                         ......

                         struct list_head list;

                         .......

                  };

                 像my_data

 

     

 

 

 

                  

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值