c语言新手求教一个linux内核代码的问题
#define list_entry(ptr, type, member) \
container_of(ptr, type, member)
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
size_t 是unsigned long
typedef struct xxx
{
type1 member;
……(结构体中其他域)
}type;
定义变量:
type a;
type * b;
type1 * ptr;
&((type *)0)->member取得的是个什么,为什么要转为u long
为什么要用__mptr当中间变量,不直接用ptr。
最后用char型的__mptr减ulong的偏移量可以得到该结构体的地址吗?
container_of(ptr, type, member)
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
size_t 是unsigned long
typedef struct xxx
{
type1 member;
……(结构体中其他域)
}type;
定义变量:
type a;
type * b;
type1 * ptr;
&((type *)0)->member取得的是个什么,为什么要转为u long
为什么要用__mptr当中间变量,不直接用ptr。
最后用char型的__mptr减ulong的偏移量可以得到该结构体的地址吗?
...全文
相关推荐
linux下用c读取cpu、内核等信息
"该代码示例展示了如何在Linux环境下使用C语言读取CPU、内核以及其他系统信息。通过访问特定的系统文件,如'/proc/cpuinfo'、'/etc/hostname'、'/proc/versi
用Source Insight打开linux内核源代码
阅读 Linux 内核源代码的方法:阅读 Linux 内核源代码需要有恒心和正确的方法。基本要求是操作系统的基本知识、C 语言的熟悉和汇编语言的知识。
写给Linux内核新手
**C语言**:虽然精通C语言并非必要,但能够熟练编写C程序、理解链表和散列表等数据结构的C实现,以及熟悉gcc编译器的基本操作,将有助于学习过程。3.
C语言实现Linux内核Shell程序
1.1.课程设计内容编写一个C语言程序作为Linux内核的shell命令行解释程序,所执行的结果需和系统命令行方式保持一致,理解系统使怎样进行命令的解析和执行。基本运行方式:[COMMAND命令 OP
Linux 1.1版内核带注释源代码(C语言)
这个版本虽然相对现代内核来说较为古老,但它包含了许多基础的Linux内核功能,适合初学者逐步理解Linux内核的工作方式。C语言是实现这个内核的主要编程语言,因此对C语言的熟悉也是必不可少的。1.


