首页 > 系统相关 >linux内核 list_for_each_entry

linux内核 list_for_each_entry

时间:2024-07-01 12:08:53浏览次数:17  
标签:head cur list member each entry struct

1. linux内核中的list用法

在linus内核中,list一般这样使用:

struct list_head {
    struct list_head *priv;
    struct list_head *next;
}

struct xxx {
    int value; // 结构体的真实成员
    struct list_head *lh;
}

 

2. list遍历

结构体xxx里面有struct list_head *lh,同时lh通过priv和next和其他list_head*建立联系,这样就形成了结构体链表。

// 已知ptr是type结构体里面的member,求这个type结构体的地址
#define list_entry(ptr, type, member) container_of(ptr, type, member)

// ① 不要修改链表头
// ② cur_struct是传入的、可以被修改的、遍历找到的、成员包含list_head的结构体
#define list_for_each_entry(cur_struct, cur_list_head, member) \
    for (cur_struct = list_entry(cur_list_head, typeof(cur_struct), member); \
         &cur_struct->member != cur_list_head;  // linux list是一个“双向环状”列表
         cur_struct = list_entry(cur_struct->member.next, typeof(*cur_struct), member))

 

标签:head,cur,list,member,each,entry,struct
From: https://www.cnblogs.com/moon-sun-blog/p/18277795

相关文章

  • Batch文件中使用tasklist命令:深入掌握进程监控与分析
    在Windows操作系统中,tasklist命令是一个强大的工具,它允许用户查看当前运行的进程和它们的详细信息。在自动化脚本和批处理文件(Batch文件)中使用tasklist可以极大地增强对系统状态的监控能力。本文将详细介绍如何在Batch文件中使用tasklist命令来查看和管理进程。1.tasklist......
  • Java创建List的4种方法
    1、通过构造方法,例如:List<String>list=newArrayList<>();然后调用list.add增加元素,如果知道初始化的值,这种先构造再一项项添加的方式,用起来并不爽,于是一边都用下面的方法2、通过Arrays.asList("a","b");但是这种方法构造出的List是固定长度的,如果调用add方法增加新的元素,......
  • 【NAS】绿联NAS+alist+lsky+natfrp 实现图床服务
    alist安装与配置值得一提的就是,映射的data是配置相关的,让绿联直接默认路径就行,不需要手动设置但是文件保存位置的映射的话,为了方便,可以单独映射到一个方便访问的文件夹,(但是要注意下权限问题)端口,穿透的是(20010:5244)这个端口创建完毕,账号默认admin,密码在运行日志里面查看nat......
  • 【异常错误】ValueError: rdkit.Chem.rdchem.BondType.DATIVE is not in list
    在处理MoleculeNet_datasets的HIV数据集的时候出现了下面的错误:35275352763527735278Traceback(mostrecentcalllast):File"data/MoleculeNet_datasets/splitters.py",line283,in<module>dataset=MoleculeDataset(f'{data_path}',dataset=f'......
  • antdesign-vue3 List的分页器最全配置
    AntDesignVue官网:https://www.antdv.com/components/list-cn何时使用#最基础的列表展示,可承载文字、列表、图片、段落,常用于后台数据展示页面。<a-listsize="large"bordered:data-source="listData":pagination="pagination"><......
  • def __init__(self,parameterlist)初始化方法和def __functionName__(self,parameterl
    问题描述:def__init__(self,parameterlist)初始化方法和def__functionName__(self,parameterlist)实例方法,其中functionName是具体方法的名字,比如表示奔跑、或者狗叫的方法。对于上面这两种方法有什么区别?问题解答:在Python类中,__init__方法和其他实例方法(如__functionName_......
  • def init(parameterlist),是用来创建类的方法,其中parameterlist是方法所需要传入的属性
    问题描述:definit(parameterlist),是用来创建类的方法,其中parameterlist是方法所需要传入的属性参数。请问参数是按照顺序排列的吗?问题解答:是的,在Python中,__init__(self,parameterlist)方法的参数是按照顺序排列的。这意味着在创建类的实例时,传递给构造函数的参数需要按......
  • 一次breach1靶机的渗透测试
    1.端口扫描和信息收集2.CMS后台信息收集3.解密HTTPS流量4.tomcat的后台利用5.提权1.端口扫描和信息收集:首先进行主机发现,找到目标机器:nmap-sP192.168.110.1/24 找到目标机器,进行端口扫描:nmap-T4-A-v192.168.110.140一共扫到996个开放的端口,正好里面有......
  • 【C++】list的使用方法和模拟实现
    ❤️欢迎来到我的博客❤️前言list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素list与forward_list非常相似:最......
  • 一分钟轻松掌握Java的Vector&ArrayList
    Vector方法是同步的,线程安全ArrayList方法是非同步的,效率较高向量变量的声明格式Vector<向量元素的数据类型>变量名;示例Vectorvs;创建向量实例对象Vectorvs=newVector();在Java中,Vector<Object>是一个泛型Vector,它专门用于存储Object类型或其子类型的对象......