当前位置: 技术问答>linux和unix
内核中(type *)0是什么含义?
来源: 互联网 发布时间:2016-05-07
本文导语: struct list_head { struct list_head *next, *prev; }; struct list_head *tmp; struct usb_hub *hub; hub = list_entry(tmp, struct usb_hub, event_list); #define list_entry(ptr, type, member) ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member))) (type*)0在这...
struct list_head {
struct list_head *next, *prev;
};
struct list_head *tmp;
struct usb_hub *hub;
hub = list_entry(tmp, struct usb_hub, event_list);
#define list_entry(ptr, type, member)
((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))
(type*)0在这里是什么意思啊?
谢谢
|
(unsigned long)(&((type *)0)->member))
这一长串就是取得member在结构体中的偏移量。
这一长串就是取得member在结构体中的偏移量。
|
LS说得正确!~
0就看作一个地址,那么 (type *0) 就是将从地址0开始的一段内存转化为一个type类型的指针!
0就看作一个地址,那么 (type *0) 就是将从地址0开始的一段内存转化为一个type类型的指针!
|
阅读一下list_entry被调用的函数就明白了,在Linux中可以把list_head放到结构体的任何位置,
利用list_entry就可以通过list_head很容易找到结构体的地址了。
利用list_entry就可以通过list_head很容易找到结构体的地址了。
|
1楼说的非常正确。