这句什么意思阿(里面的,不是define)
#define list_entry(ptr, type, member) \((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member))) (char*)(ptr)-(unsigned long)(&((type *)0)->menmber)
大概是地址运算,然后转为指定类型的指针作为最后的list入口
&((type *)0)->menmber,&取地址,((type *)0)不知道是什么, 了解谢谢阿! ((type *)0)
表示从0开始计算,就象数组的下标一样。
你也可以改为((type *)1),不过这时的地址是从1开始了 一般用于计算某个数据结构在它自己的双向链表中的位置,memeber一般会是list_head结构 关注,谁能说的细点,再举个应用的例子呢 8) 内核代码里这种例子太多了
#define prev_task(task) list_entry(task->tasks.prev, struct task_struct, tasks) 看到这样一篇文章,与大家共享http://www-900.ibm.com/developerworks/cn/linux/kernel/l-chain/index.shtml 8)
页:
[1]