这个是Linux kernel里面的宏, 作用大概如下, 现在你有一个
struct big{
struct small sname_in_big;
int some_else
};
struct small{}
然后有一个函数, 传入参数只有一个*small, 比如
void some_func(struct small *s);
在这个函数里面, 你想作这么一件事情, 想得到那个int some_else的值是多少, 而你的函数只有一个struct small* 的参数, 所以kernel里面就有这么一个函数可以帮你获得 struct big的指针。
就是container_of
在这个函数里面可以这样用:
void some_func(struct small *s) {
struct big *b;
b = container_of (s, struct big, sname_in_big);
}
不过, 还有一个更重要的前提。 就是, 这个函数的参数的这个s,必须是struct big的一部分。 也就是说, 必须有这样一个步骤, struct big a; a.sname_in_big = some_small.
some_func(&a.sname_in_big);
才可以找到big的正确的地址。
这里的解释更详细:
http://www.kroah.com/log/linux/container_of.html
1 条评论:
笨笨
发表评论