Peter.Y的技术博客

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

  由于内核中需要大量的使用双链表,因此将双链表数据结构抽象出来,成为list_head结构体。对于这样的问题,内核源代码采用的方法如下:
  利用宏container_of(ptr,type,member) ({
  const typeof( ((type *)0)->member) * __mptr = (ptr);
        (type *)( (char *)__mptr - offsetof(type,member));})

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

posted on 2007-08-05 00:20  Peter.Y  阅读(262)  评论(0编辑  收藏  举报