container_of
是一個 C 語言宏,用于在驅動程序和內核編程中獲取包含特定成員的結構體實例
在驅動程序開發中,container_of
宏通常用于處理設備、文件或其他數據結構。這些數據結構通常包含一個特定的成員變量,如 struct device
、struct file
等。當你有一個指向這些成員變量的指針時,可以使用 container_of
宏獲取包含該成員變量的整個結構體實例。
例如,假設你有一個名為 struct my_device
的自定義設備結構體,它包含一個 struct device
類型的成員變量 dev
:
struct my_device {
int some_data;
struct device dev;
};
現在,你有一個指向 struct device
的指針,但你需要訪問 struct my_device
中的 some_data
成員。你可以使用 container_of
宏來實現這一目標:
struct device *dev_ptr = /* ... */;
struct my_device *my_dev = container_of(dev_ptr, struct my_device, dev);
int data = my_dev->some_data;
這樣,你就可以訪問和操作包含在 struct my_device
中的其他成員變量。這在驅動程序開發中非常有用,因為它允許你在回調函數和其他處理程序中輕松地訪問與特定設備或數據結構相關的上下文信息。