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))

linux内核 list_for_each_entry的更多相关文章

  1. linux内核学习之七 可执行程序的装载和运行

    一 程序的装载和运行的基本知识补充    1 当进程开始执行一个新的程序时,从父进程继承的所有页被释放,以便在新的用户地址空间开始执行新的计算,甚至进程的特权都可能发生改变,但是,进程的PID不会改变 ...

  2. 第七周——Linux内核如何装载和启动一个可执行程序

    万子惠 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 part1 实验 ...

  3. Linux内核【链表】整理笔记(2)

    关于链表我们更多时候是对其进行遍历的需求,上一篇博文里我们主要认识了一下和链表操作比较常用的几个内核API接口,其入参全都是清一色的struct list_head{}类型.至于链表的遍历,内核也有一 ...

  4. Linux内核循环链表经典分析和移植

    为什么说这个链表做的经典呢,哥哥我从Linux内核里边儿扣出来的,要么怎么说内核不是一般人能写的,这代码太TM优美了! 这里有一篇参考文章:http://isis.poly.edu/kulesh/st ...

  5. Linux内核装载和启动一个可执行程序

    “平安的祝福 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ” 理解编 ...

  6. Linux内核设计第七周 ——可执行程序的装载

    Linux内核设计第七周 ——可执行程序的装载 第一部分 知识点总结 一.预处理.编译.链接和目标文件的格式 1.可执行程序是怎么得来的 编译链接的过程 预处理阶段 gcc -E -o XX.cpp ...

  7. 《Linux内核分析》第七周 可执行程序的装载

    [刘蔚然 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] WEEK SEVEN ...

  8. LINUX内核分析第七周学习总结:可执行程序的装载

    LINUX内核分析第七周学习总结:可执行程序的装载 韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/cours ...

  9. Linux内核如何装载和启动一个可执行程序

    exec 本节我们分析exec系统调用的执行过程. exec一般和fork调用,常规用法是fork出一个子进程,然后在子进程中执行exec,替换为新的代码. do_exec 跟上次的fork类似,这里 ...

  10. 基于tiny4412的Linux内核移植 --- aliases节点解析

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

随机推荐

  1. Spring-Event入门实践及执行原理

    一.入门案例 1. 添加依赖首先,在 pom.xml 文件中添加 Spring Boot 和 Spring Event 的依赖: <dependencies> <dependency ...

  2. json编码格式化美化

    有时候你想存储一个json到文件中,然后让别人调用或者读取或者作为临时存储,诸如此类. 但是php json_encode后数据是压缩的没有格式化,导致读起来有点费劲. 所以你可以这样(php 5.4 ...

  3. json-lib(ezmorph)、gson、flexJson、fastjson、jackson对比,实现java转json,json转java

    json-lib(ezmorph).gson.flexJson.fastjson.jackson对比,实现java转json,json转java 本文中所讲的所有代码都在此:json-test 目前关 ...

  4. Liunx-Shell脚本

    shell可以理解为对命令行的一个解释器,命令行输入命令,shell执行,linux系统输出结果 1. shell脚本格式 开头: #!/bin/bash #!告诉系统其后路径所指定的程序即是解释此脚 ...

  5. Windows下搭建Linux开发环境(vagrant)

    [下载] vagrant软件:https://www.virtualbox.org/wiki/Downloads centos镜像: http://isoredirect.centos.org/cen ...

  6. 2024御网杯信息安全大赛个人赛wp_2024-11-27

    MISC题解 题目附件以及工具链接: 通过网盘分享的文件:御网杯附件 链接: https://pan.baidu.com/s/1LNA6Xz6eZodSV0Io9jGSZg 提取码: jay1 --来 ...

  7. 2024web漏洞扫描神器xray安装及使用_2024-11-28

    一.功能 开源的Web漏洞扫描工具,支持以下漏洞 XSS漏洞检测 (key: xss) SQL 注入检测 (key: sqldet) 命令/代码注入检测 (key: cmd-injection) 目录 ...

  8. Sealos Devbox 基础教程:使用 Cursor 从零开发一个完整的项目

    作者:熊猫Jay,上市公司技术负责人,破局AI 提示词.AI编程教练.通往AGI之路内容共创者 最近发现身边越来越多人尝试用 Cursor 写代码.开发小产品了. 如果想要实现商业化或引流,我们的小工 ...

  9. Java基础面试:Java中的方法

    Java 中的方法 什么是方法 方法是 Java 中的一段可重用的代码块,用于执行特定的任务,是程序中的最小执行单元. 参数:方法可以接受一个或多个参数,这些参数是传递给方法的值,用于方法内部的逻辑运 ...

  10. base64计算文件大小方法(C#和js)

    base64文件大小计算 有时候图片被base64之后需要计算图片大小,因为被编码后全是字符,计算文件大小可以反序列化成文件之后再获取大小,但是会比较麻烦.简单介绍一种利用base64编码原理计算大小 ...