内核链表源码注释理解!
来源:互联网 发布:win10国外优化软件 编辑:程序博客网 时间:2024/06/08 03:16
为了更好的理解内核链表源代码!! 为了日后复习内核链表!给自己有如下总结,方便日后自己查看!
请配合内核源码阅读!
请配合内核源码阅读!
首先:
typedef struct
{
unsigned short ID;
int connfd;
struct list_head list;
}clinode, *clilist;
声明一个大结构体,里面内容包含你的个人需要的信息,后面加上内核链表。
其中 struct list_head xxx 这样就加入了一个内核链表
}clinode, *clilist;
声明一个大结构体,里面内容包含你的个人需要的信息,后面加上内核链表。
其中 struct list_head xxx 这样就加入了一个内核链表
初始化节点:
INIT_LIST_HEAD(&大结构体指针head->list)
这里初始化的是第一个大结构体(即为头节点)里面的小结构体(即内核链表)!!
所以是取地址 &head->list
INIT_LIST_HEAD(&大结构体指针head->list)
这里初始化的是第一个大结构体(即为头节点)里面的小结构体(即内核链表)!!
所以是取地址 &head->list
生成一个新的独立的节点:
(注意这里的节点是大结构体)(这里生成head,就是头结点,但不用对内容赋值就是了)
clilist new = calloc(1, sizeof(clinode));
if(new != NULL)
{
new->ID = ID;
new->connfd = connfd;
(注意这里的节点是大结构体)(这里生成head,就是头结点,但不用对内容赋值就是了)
clilist new = calloc(1, sizeof(clinode));
if(new != NULL)
{
new->ID = ID;
new->connfd = connfd;
INIT_LIST_HEAD(&new->list); 这部分就跟前一点就是一样的道理了!
}
}
把新节点加入到链表:
list_add(&new->list, &head->list);
这里传参也是对小结构体的操作!需要取地址。分别就是把新节点里的小结构体地址
与头结点里的小结构体的地址传进去!!
list_add_tail(&new->list,&head->list) 这个就是尾插而已!
删除一个节点:
这里的删除指的是让这个节点脱离链表,内存则是按需释放!
list_del(&one->list);
传参只需要把这个节点的小结构体拿出来传参。
遍历链表:
struct list_head *pos; 定义一个指向小结构类型的指针,用来定位,这个是不能访问到大结构体的!
clilist p; 定义一个大结构体的指针,用来访问到大结构体!
list_for_each(pos, &head->list) 遍历,传参POS &head->list
{
p = list_entry(pos, clinode, list); list_entry是个宏定义,作用是把p变成指向pos所指的那个节点的指针!第二个参数是节点类型!第三个参数是小结构体list
·
·
·
{
p = list_entry(pos, clinode, list); list_entry是个宏定义,作用是把p变成指向pos所指的那个节点的指针!第二个参数是节点类型!第三个参数是小结构体list
·
·
·
阅读全文
0 0
- 内核链表源码注释理解!
- 内核链表学习注释
- Vector源码注释,粗略理解
- Linux内核源码之红黑树注释
- Linux2.6.36内核红黑树源码注释
- linux内核工作队列讲解和源码详细注释
- linux 0.11内核源码 linux下中文注释乱码
- 结合linux内核源码理解SYN_RECV状态
- 结合linux内核源码理解SYN_RECV状态
- 对内核源码中IS_ERR的理解
- 对内核源码中IS_ERR的理解
- 个人--对编译内核源码的理解
- uc/os-ii内核源码理解(一)
- <深入理解Linux内核>--Linux源码步步为营 Unix内核概述
- 深入理解Linux内核中的链表
- 深入理解Linux内核中的链表
- 一、 深入理解linux内核链表
- 深入理解linux内核链表
- 2017.8.21考试
- Redis
- Java 反射 —— 运行时的类型信息
- VS2015使用小技巧 断点调试
- Android错题与算法笔记
- 内核链表源码注释理解!
- 阿里巴巴测验题猴子摘桃问题(LIS问题)
- 装配bean
- Servlet、Struts2、SpringMVC执行流程
- 代码覆盖率 (Code Coverage)从简到繁 (一)
- Cordova插件开发
- 金蝶K3单据新增页面在单据体体现物料即时库存数据
- ubuntu使用-基本篇:常用软件
- VS2015调试功能初探