gpt4 book ai didi

linux - 为什么container_of宏会阻止内核的其他部分修改结构体的唯一字段?

转载 作者:太空宇宙 更新时间:2023-11-04 03:34:42 24 4
gpt4 key购买 nike

我在互联网上寻找信息,在阅读 http://www.kroah.com/log/linux/container_of.html 后,我终于知道了宏是如何工作的以及它的作用。最后,它表示它可以防止内核的其他部分修改用于控制子系统代码的结构的独特字段。你能解释一下为什么吗?

抱歉我的英语不好。

最佳答案

webpage您链接到的示例如下:

struct i2c_driver {
char name[32];
struct device_driver driver;
};

Linux 设备驱动程序核心只关心 struct device_driver而不是与 struct i2c_driver 相关的具体细节。这是设备驱动程序核心关心的抽象级别。因此,在Linux设备驱动程序核心中,有一个指向struct device_driver的指针。将被传递,而不是指向设备特定结构的指针。如果您有struct device_driver如果没有其他知识,您无法确定哪种类型的结构包含 struct device_driver

用面向对象编程术语来打个比方:struct i2c_driverstruct device_driver 的子“类” 。在面向对象编程中,如果没有一些其他信息,例如通过使用 struct device_driver 获得的信息,则无法从父类型(例如 struct i2c_driver )转到子类型(例如 typeof )。操作或类似的东西。类似地,如果某段代码有一个指向 struct device_driver 的指针除非它对指针指向的内容做出一些假设,否则它不会尝试访问 struct i2c_driver 中的任何一个。字段。

请注意,“阻止”确实不是我会选择的词,因为至少在我看来,“阻止”意味着存在一些编译时或运行时保护可以阻止这种情况的发生。不是这种情况。相反,遵守设备驱动程序抽象约定的编写良好代码将不会操作“子”对象字段。然而,除了破坏抽象之外,没有什么可以阻止某人这样做。

最后,您所指的那句话之前的句子阐明了这一点:

The driver core only passes in the type of driver structure registered with it, so this type of manipulation is safe. This also prevents other parts of the kernel from modifying the unique fields of the structure used to control the subsystem's code.

基本上,重申驱动核心只关心struct device_driver没有任何特定于设备的内容。

关于linux - 为什么container_of宏会阻止内核的其他部分修改结构体的唯一字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32012931/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com