container_of使用方法
时间: 2023-08-10 19:28:15 浏览: 86
container_of是一个常用的宏,它可以根据结构体中的某个成员变量的地址,计算出整个结构体的地址。其定义如下:
```
#define container_of(ptr, type, member) \
((type *)((char *)(ptr) - offsetof(type, member)))
```
其中,ptr是结构体中某个成员变量的地址,type是结构体的类型,member是结构体中作为链表节点的成员变量名。
使用container_of宏时,需要注意以下几点:
1. ptr必须是结构体中成员变量的地址,否则计算出的地址可能是错误的。
2. type必须是结构体的类型,否则计算出的地址可能是错误的。
3. member必须是结构体中作为链表节点的成员变量名,否则计算出的地址可能是错误的。
使用container_of宏的示例代码如下:
```
struct my_struct {
int val;
struct list_head node;
};
struct list_head *ptr = &some_node->node;
struct my_struct *obj = container_of(ptr, struct my_struct, node);
```
在上面的代码中,some_node是一个链表节点的指针变量,ptr指向some_node节点中的node成员变量。使用container_of宏可以计算出整个结构体my_struct的地址,并将其赋值给obj变量。在后续的代码中,可以通过obj指针访问结构体中的成员变量val。
阅读全文