4. Linux链表
4.1. container_of(ptr,type,member)函数简介
container_of位于内核源码<linux/list.h>中,函数是内核空间的函数,所以我们在应用程序中,也就是用户态是无法使用。解决方法就是如果想使用,就在自己的应用程序下新建该函数即可,同理内核链表list也是无法在用户程序使用,如果应用程序想使用,就拷一份到自己的工程目录下。
问题:如何通过一个结构体成员变量,得到该结构体变量的首地址?
#include <stdio.h>
struct MY_STRUCT
{
int i;
int j;
int k;
};
struct MY_STRUCT test={
1,2,3
};
/*
* 假如我们知道test.k的地址,如果求得,test的地址呢?
*/
int main(int argc, char *argv[])
{
MY_STRUCT *p = container_of(&test.k,struct MY_STRUCT,k);
printf("p addr:%d test addr:%d \n",(uint32_t)p,(uint32_t)test);
}