内核数据结构用法(5)hlist

news/2025/2/22 15:21:31

hlist

hlist(哈希链表)是一种在 Linux 内核中使用的链表结构,主要用于实现哈希表。它是一种轻量级的数据结构,适用于需要高效插入和删除操作的场景。以下是对 hlist 的详细介绍及用法。

hlist 的结构

在 Linux 内核中,hlist 由两个主要结构组成:

  1. hlist_head:表示链表的头部。
  2. hlist_node:表示链表中的每个节点。
定义
struct hlist_node {
    struct hlist_node *next, **pprev;
};

struct hlist_head {
    struct hlist_node *first;
};

特点

  • 双向链表:每个节点都有一个指向下一个节点的指针和一个指向前一个节点的指针(通过 pprev 实现)。
  • 减少内存开销:相比于传统链表,hlist 结构能够减少内存占用,尤其是在使用哈希表时。
  • 适用于哈希表:常与哈希表结合使用,提供高效的查找、插入和删除操作。

用法

1. 初始化

在使用 hlist 之前,需要先初始化头部:

struct hlist_head my_list;
INIT_HLIST_HEAD(&my_list);
2. 插入节点

要插入节点,首先需要创建一个 hlist_node,然后将其插入到链表中:

struct hlist_node *new_node = kmalloc(sizeof(struct hlist_node), GFP_KERNEL);
hlist_add_head(new_node, &my_list);
3. 遍历链表

可以使用 hlist_for_each_entry 来遍历链表中的所有节点:

struct my_struct {
    int data;
    struct hlist_node node;
};

struct my_struct *entry;
hlist_for_each_entry(entry, &my_list, node) {
    printk("Data: %d\n", entry->data);
}
4. 删除节点

要删除节点,可以使用 hlist_del 函数:

hlist_del(node);
kfree(node);  // 释放内存

http://www.niftyadmin.cn/n/5862444.html

相关文章

图论 之 迪斯科特拉算法求解最短路径

文章目录 题目743.网络延迟时间3341.到达最后一个房间的最少时间I 求解最短路径的问题,分为使用BFS和使用迪斯科特拉算法,这两种算法求解的范围是有区别的 BFS适合求解,边的权值都是1的图中的最短路径的问题 图论 之 BFS迪斯科特拉算法适合求…

Linux自学day24-进程和线程2

一 进程结束 这段代码的主要功能是创建一个子进程,子进程休眠 10 秒后以退出状态码 10 结束,父进程等待子进程结束并回收其资源,同时根据子进程的退出状态输出相应的信息。 int main(int argc, const char **argv) {// 定义一个 pid_t 类…

飞书API

extend目录下,API <?php // ---------------------------------------------------------------------- // | 飞书API // ---------------------------------------------------------------------- // | COPYRIGHT (C) 2021 http://www.jeoshi.com All rights reserved. …

电商API安全防护:JWT令牌与XSS防御实战

在电商 API 的安全防护中&#xff0c;JWT&#xff08;JSON Web Token&#xff09;令牌用于身份验证和授权&#xff0c;而 XSS&#xff08;跨站脚本攻击&#xff09;防御则是防止恶意脚本注入&#xff0c;保护用户数据和系统安全。以下是这两方面的实战介绍。 JWT 令牌实战 1. 生…

flowable适配达梦数据库

文章目录 适配相关问题无法从数据库产品名称“DM DBMS”中推断数据库类型分析解决 构建ibatis SqlSessionFactory时出错&#xff1a;inStream参数为null分析解决 liquibase相关问题问题一&#xff1a;不支持的数据库 Error executing SQL call current_schema: 无法解析的成员访…

网络安全-Mysql注入知识点

本篇文章介绍sql注入时数据库是Mysql时需要掌握的知识点。以Navicat、mysql 5.7.4为例。 注释 #或--空格是单行注释 /**/是内联注释 SQL语句 查询语句 SELECT〈目标列组〉 FROM〈数据源〉 [WHERE〈元组选择条件〉] [GROUP BY〈分列组〉[HAVING 〈组选择条件…

MySql面试宝典【刷题系列】

文章目录 一、Mysql 的存储引擎 myisam 和 innodb 的区别。二、MySQL数据库作发布系统的存储&#xff0c;一天五万条以上的增量&#xff0c;预计运维三年,怎么优化&#xff1f;三、对于大流量的网站,您采用什么样的方法来解决各页面访问量统计问题&#xff1f;四、锁的优化策略…

代码随想录算法训练day59---图论系列4

代码随想录算法训练 —day59 文章目录 代码随想录算法训练前言一、110.字符串接龙二、105.有向图的完全可达性dfs版本1dfs版本2bfs版本 三、100. 岛屿的最大面积方法一方法二 总结 前言 今天是算法营的第59天&#xff0c;希望自己能够坚持下来&#xff01; 今天继续图论part&…