vivo 发表于 2005-1-31 12:26:28

这句什么意思阿(里面的,不是define)

#define list_entry(ptr, type, member) \
        ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))

yg_sun 发表于 2005-1-31 15:12:26

(char*)(ptr)-(unsigned long)(&((type *)0)->menmber)
大概是地址运算,然后转为指定类型的指针作为最后的list入口
&((type *)0)->menmber,&取地址,((type *)0)不知道是什么,

vivo 发表于 2005-1-31 20:47:45

了解谢谢阿!

gotop167 发表于 2005-2-3 16:49:42

((type *)0)
表示从0开始计算,就象数组的下标一样。
你也可以改为((type *)1),不过这时的地址是从1开始了

shy828301 发表于 2005-2-4 12:41:14

一般用于计算某个数据结构在它自己的双向链表中的位置,memeber一般会是list_head结构

bzimage 发表于 2005-3-3 18:31:06

关注,谁能说的细点,再举个应用的例子呢 8)

shy828301 发表于 2005-3-4 10:53:11

内核代码里这种例子太多了
#define prev_task(task) list_entry(task->tasks.prev, struct task_struct, tasks)

bzimage 发表于 2005-3-4 19:32:10

看到这样一篇文章,与大家共享http://www-900.ibm.com/developerworks/cn/linux/kernel/l-chain/index.shtml 8)
页: [1]
查看完整版本: 这句什么意思阿(里面的,不是define)