Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C lwn.net中示例代码的容器_C_Linux Kernel - Fatal编程技术网

C lwn.net中示例代码的容器

C lwn.net中示例代码的容器,c,linux-kernel,C,Linux Kernel,当看到: void my_object_release(struct kobject *kobj) { struct my_object *mine = container_of(kobj, struct my_object, kobj); /* Perform any additional cleanup on this object, then... */ kfree (mine); } 在中,第三个参数kobj中似乎不正确。我认为应该是kobject给定的代码是正确的

当看到:

void my_object_release(struct kobject *kobj)
{
   struct my_object *mine = container_of(kobj, struct my_object, kobj);

   /* Perform any additional cleanup on this object, then... */
   kfree (mine);
}

在中,第三个参数
kobj
中似乎不正确。我认为应该是
kobject
给定的代码是正确的:第三个参数是指针指向的容器结构成员的名称,而不是其类型,因此
kobj
是正确的。这个示例有些混乱,因为第一个
kobj
与第二个
kobj
不对应:第一个是调用方作用域中的指针

下面是一个图表,希望能澄清的
容器\u的参数:

container_of(kobj, struct my_object, kobj)
              |            |          |
              |            |          |
              \------------+----------+--------------------------------\
                           |          |                                |
                           |          |                                |
         /-----------------/          |                                |
         |                            |                                |
         V              /-------------/                                |
+------------------+    |                                              |
| struct my_object | {  |                                              |
+------------------+    V                                              V
                   +------+                                         +------+
    struct kobject | kobj |; <-- You have a pointer to this, called | kobj |
                   +------+                                         +------+
    ...
};
container_of(kobj,struct my_object,kobj)
|            |          |
|            |          |
\------------+----------+--------------------------------\
|          |                                |
|          |                                |
/-----------------/          |                                |
|                            |                                |
V/--------------/|
+------------------+    |                                              |
|结构my|u对象{|
+------------------+V V
+------+                                         +------+

struct kobject | kobj |;第三个参数是指针指向的容器结构成员的名称,而不是其类型