在linux內核中有一個struct XX
,它包含一個struct list_head YY
。檢索list_head對象的父結構
現在給出一個指向struct XX
對象的指針,我想要查找鏈接列表中的所有XX
結構。所以我會通過list_head結構,然後找到相應的父結構。
但這裏的第二步似乎不適用。所以我不確定是否有可能實現這一點。
例子:
struct XX {
...
struct list_head YY;
};
在linux內核中有一個struct XX
,它包含一個struct list_head YY
。檢索list_head對象的父結構
現在給出一個指向struct XX
對象的指針,我想要查找鏈接列表中的所有XX
結構。所以我會通過list_head結構,然後找到相應的父結構。
但這裏的第二步似乎不適用。所以我不確定是否有可能實現這一點。
例子:
struct XX {
...
struct list_head YY;
};
您應該使用container_of
宏(LDD3 chapter 3: The open method)。
或者Windows上的CONTAINING_RECORD宏(你不會說你使用的是什麼平臺)。 – Stewart
我想你是問如何找到包含給定列表節點(你有一個指針)的對象。如果是這樣,你想這個宏的一些變種:
//given the address of a member, find the address of the object containing the member.
#define GetObjectFromMember(ObjectType,MemberName,MemberPointer) \
((ObjectType *)(((char *)MemberPointer) - ((char *)(&(((ObjectType *)0)->MemberName)))))
給定一個結構美孚和成員m_bar,指針,P,以實例的m_bar:
Foo *foo = GetObjectFromMember(Foo,m_bar,p);
ASSERT(&foo->m_bar == p);
我用的這個宏大量的回調,我把一個指向回調對象的指針(比如一個定時器)並且需要找到周圍的對象指針。由於linux內核使用入侵列表,我確信它已經有了這個宏,但我從來沒有真正去尋找它。
你能舉一個你問什麼的例子嗎?這個問題不明確。 – Mike
@Mike添加了結構XX定義 – daisy