linux
我恨天
这个作者很懒,什么都没留下…
展开
-
Linux 内核list_head 学习
在Linux内核中,提供了一个用来创建双向循环链表的结构 list_head。虽然linux内核是用C语言写的,但是list_head的引入,使得内核数据结构也可以拥有面向对象的特性,通过使用操作list_head 的通用接口很容易实现代码的重用,有点类似于C++的继承机制(希望有机会写篇文章研究一下C语言的面向对象机制)。下面就是kernel中的list_head结构定义:struct li转载 2013-08-01 23:24:10 · 516 阅读 · 0 评论 -
list.h分析
6.链表的修改: 其实内核差不多都是把这些函数封装起来了,其实链表的修改也是这样的,代码其实很简单,没有什么解释的,就是把旧的结点的next和prev与原链表断开,再与新的结点的next和prev连接起来。如下函数:static inline void list_replace(struct list_head*new,struct list_head转载 2013-08-02 13:59:26 · 726 阅读 · 0 评论 -
linux 内核代码list.h 阅读
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)先分析一下这个 宏的运行机理:一共4步 1. ( (TYPE *)0 ) 将零转型为TYPE类型指针; 2. ((TYPE *)0)->MEMBER 访问结构中的数据成员; 3. &( ( (TYPE *)0 )->MEMBER )取出数据成员的地址; 这原创 2013-08-01 17:03:38 · 645 阅读 · 0 评论 -
内核数据结构:hlist_head
内核中,使用list_head作为链表,该数据结构本身即使head又是node。如果将它作为hash list的头节点,那么每个头节点会占用8个字节。因此内核中对其优化,使用hlist_head作为hash表的头节点。内核中定义其数据结构为:struct hlist_head { struct hlist_node *first; };struct hlist_node { s转载 2013-08-02 14:54:24 · 591 阅读 · 0 评论 -
list.h使用说明
1 位置2 数据结构3 接口3.1 offsetof3.2 container_of3.3 LIST_HEAD_INIT3.4 LIST_HEAD3.5 INIT_LIST_HEAD3.6 _list_add3.7 list_add3.8 list_add_tail3.原创 2013-08-08 11:00:46 · 16450 阅读 · 5 评论 -
关于EXPORT_SYMBOL
linux2.6的“/prob/kallsyms”文件对应着内核符号表,记录了符号以及符号所在的内存地址。模块可以使用如下宏导出符号到内核符号表:[c-sharp] view plaincopyEXPORT_SYMBOL(符号名); EXPORT_SYMBOL_GPL(符号名) 导出的符号可以被其他模块使用,不过使用之前一转载 2013-08-08 10:55:59 · 671 阅读 · 0 评论 -
Linux内核哈希表分析与应用
前言:1.基本概念:散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。2. 常用的构造散列函数的方法散列函数能使对一个数据序列的访问过程更加迅速有效,通过散列函数,数据元素将被更快地定位。散转载 2013-08-08 13:35:09 · 719 阅读 · 0 评论