千里之行始于足下

Linux内核源代码情景分析读书笔记(2)-Linux内核中的C语言

Posted on By Peter Yang

对于Linux中的C,采用gcc编译器进行编译,其内核源代码的编译也依赖相应的gcc版本。

由于内核中需要大量的使用双链表,因此将双链表数据结构抽象出来,成为list_head结构体。对于这样的问题,内核源代码采用的方法如下: 利用宏

1
2
3
container_of(ptr,type,member) ({
    const typeof( ((type *)0)->member) * __mptr = (ptr); 
    (type *)( (char *)__mptr - offsetof(type,member));})

其中ptr表示list成员指针,type表示宿主结构体类型,member表示宿主中list成员变量名。