Chinaunix首页 | 论坛 | 博客
  • 博客访问: 22105
  • 博文数量: 9
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 35
  • 用 户 组: 普通用户
  • 注册时间: 2017-12-04 19:48
文章分类

全部博文(9)

文章存档

2018年(1)

2017年(3)

2014年(5)

我的朋友

分类: LINUX

2017-12-04 23:05:30


/*
pos: 某个结构体指针
head: 某个链表的表头,这个链表的成员是pos类型的结构体
member: pos结构体中的一个成员(一般是一个结构体,包含两个指向自身类型的指针next和prev,用于形成链表。)
这个宏的作用就是,将链表中所有的pos类型的结构体逐一取出。
*/
#define list_for_each_entry(pos, head, member) \
for (pos = list_entry((head)->next, typeof(*pos), member); \
     &pos->member != (head);  \
     pos = list_entry(pos->member.next, typeof(*pos), member))
 
#define list_entry(ptr, type, member) \
container_of(ptr, type, member)

/*
ptr: type结构体中名为member的成员的地址。
type: 某个结构体类型。
member: type结构体中的一个成员,名字叫做member。
功能:ptr的地址是已知的,ptr的地址,减去其在type结构体中的偏移,
      即可以得到ptr所在的结构体的地址。
*/
#define container_of(ptr, type, member) ({                      \
const typeof( ((type *)0)->member ) *__mptr = (ptr);    \
(type *)( (char *)__mptr - ((unsigned int) &((type *)0)->member);}) 
阅读(687) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~