返回顶部
首页 > 资讯 > 操作系统 >怎样全面了解Linux内核循环链表
  • 650
分享到

怎样全面了解Linux内核循环链表

2023-06-16 23:06:38 650人浏览 独家记忆
摘要

怎样全面了解linux内核循环链表,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。随着Linux的发展,现在Linux越来越偏离以前的主题,越来越不符合它最初的含

怎样全面了解linux内核循环链表,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

随着Linux的发展,现在Linux越来越偏离以前的主题,越来越不符合它最初的含义,不过没有变得还是Linux内核。Linux内核的名字也是“Linux”。

Linux内核循环链表结构 

注:文章中引用的代码来源于LXR,所分析的内核版本是v2.6.31。

linux内核通过定义list_head以及对于list_head上的一组操作实现对不同类型的循环链表的同类操作,这种做法避免了对于不同数据类型的循环链表定义重复的操作函数,使代码得到了充分的使用,是一种十分有效的编程方法。

list_head的定义:

19struct list_head {  20struct list_head *next, *prev;  21};

接着我们来看任意一种数据结构的循环链表(如图1),链表的每个节点中加入了一个list_head类型的变量,节点的其他变量任意。(注意:每个指针所指向的位置不是节点数据的起始位置,而是list_head类型变量的开始地址。)

怎样全面了解Linux内核循环链表

通过这样一种实现方式建立的链表,节点都是通过list_head类型的变量相连接的,那么我们如何由list_head类型得指针得到中间某个节点类型的指针呢?我们来看这样一个操作:list_entry(p,t,m),其中t是链表的节点类型,m是节点内list_head类型的变量名,p是指向该变量的指针,该操作用于从list_head指针得到指向链表节点的指针。

334#define list_entry(ptr, type, member) \   335container_of(ptr, type, member)  650#define container_of(ptr, type, member) ({  \   651const typeof( ((type *)0)->member ) *__mptr = (ptr);\   652(type *)( (char *)__mptr - offsetof(type,member) );})  24#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)   

这就是Linux内核循环链表结构。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网操作系统频道,感谢您对编程网的支持。

--结束END--

本文标题: 怎样全面了解Linux内核循环链表

本文链接: https://lsjlt.com/news/286295.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎样全面了解Linux内核循环链表
    怎样全面了解Linux内核循环链表,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。随着Linux的发展,现在Linux越来越偏离以前的主题,越来越不符合它最初的含...
    99+
    2023-06-16
  • 怎么理解Linux内核中的循环链表结构
    本篇文章给大家分享的是有关怎么理解Linux内核中的循环链表结构,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。注:文章中引用的代码来源于LXR,所分析的内核版本是v2.6.31...
    99+
    2023-06-17
  • Linux内核中的循环链表结构是什么
    Linux内核中的循环链表结构是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。文章中引用的代码来源于LXR,所分析的内核版本是v2.6.31。linux内核通过定义li...
    99+
    2023-06-17
  • 全面了解Node事件循环
    目录Node事件循环事件循环图主线程事件循环 圈timers队列的工作原理poll队列的运作方式举例梳理事件流程check 阶段setImmediate() 与 setTimeout...
    99+
    2024-04-02
  • Linux中怎么实现内核链表
    Linux中怎么实现内核链表,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。代码如下:struct list_node{stuct list_node *pre;stuct li...
    99+
    2023-06-09
  • Linux中的内核链表实例详解
    Linux中的内核链表实例详解 链表中一般都要进行初始化、插入、删除、显示、释放链表,寻找节点这几个操作,下面我对这几个操作进行简单的介绍,因为我的能力不足,可能有些东西理解的不够深入,造成一定的错误,请各...
    99+
    2022-06-04
    内核 详解 实例
  • Linux内核中双向链表怎么实现
    这篇文章主要介绍了Linux内核中双向链表怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Linux内核中双向链表怎么实现文章都会有所收获,下面我们一起来看看吧。首先让我们看一下在 include/lin...
    99+
    2023-06-28
  • Linux内核中的数据双链表如何理解
    这篇文章给大家介绍Linux内核中的数据双链表如何理解,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Linux 内核中自己实现了双向链表,可以在 include/linux/list.h 找到定义。我们将会首...
    99+
    2023-06-28
  • 怎样进行Linux内核的解析
    本篇文章为大家展示了怎样进行Linux内核的解析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。计算机由硬件和软件两大部分组合而成,软件来操作和控制计算机,完成控制工作的软件就称为操作系统,在Linu...
    99+
    2023-06-28
  • C语言编程数据结构带头双向循环链表全面详解
    目录前言一、什么是带头循环双向链表二、链表初始化三、链表接口函数1.尾插2.头插3.头删4.尾删5.任意位置插入数据6.任意位置删除数据四、打印链表总结前言 上一篇数据结构专栏:C语...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作