Linux kernel list

#define offsetof(type, member)  ((size_t) &((type*)0 -> member))  //member的offset

#define container_of (ptr ,type ,member) ({

const typeof(((type*)0)->member)* __mtpr = (ptr) ;  //ptr链表节点指针

(type*) ((char*)__mptr - offsetof(type , member)) ;   //member节点在type中的名字

})                                                         //由member与ptr取得type定义变量的地址

#define list_entry(ptr, member , type)  container_of(ptr , member , type)

struct list_head {

list_head *next;

list_head *prev;

}

ptr是指结构向list_head的数据结构的指针,type是容器数据的类型,member是list_head在type中的名字。


eg: 

struct data{

data_type  XXX;

list_head  str1;

list_head str2;

data_type XXX;

}

struct data name;

head_list *p = &name.str1;

head_list *q = &name.str2;

list_entry( p ,struct name ,str1) == &name;

list_entry( q ,struct name ,str2) == &name;

由此可实现在内核中一个进程块挂到不同的链表上,如任务链表和优先级链表。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值