container_of
是一個 C 語言宏,用于在驅(qū)動程序和內(nèi)核編程中獲取包含特定成員的結(jié)構(gòu)體實例
在驅(qū)動程序開發(fā)中,container_of
宏通常用于處理設(shè)備、文件或其他數(shù)據(jù)結(jié)構(gòu)。這些數(shù)據(jù)結(jié)構(gòu)通常包含一個特定的成員變量,如 struct device
、struct file
等。當你有一個指向這些成員變量的指針時,可以使用 container_of
宏獲取包含該成員變量的整個結(jié)構(gòu)體實例。
例如,假設(shè)你有一個名為 struct my_device
的自定義設(shè)備結(jié)構(gòu)體,它包含一個 struct device
類型的成員變量 dev
:
struct my_device {
int some_data;
struct device dev;
};
現(xiàn)在,你有一個指向 struct device
的指針,但你需要訪問 struct my_device
中的 some_data
成員。你可以使用 container_of
宏來實現(xiàn)這一目標:
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
中的其他成員變量。這在驅(qū)動程序開發(fā)中非常有用,因為它允許你在回調(diào)函數(shù)和其他處理程序中輕松地訪問與特定設(shè)備或數(shù)據(jù)結(jié)構(gòu)相關(guān)的上下文信息。