天天看點

haproxy中兩個常用的宏

list_for_each(pos, head)

  • pos、head 都為list類型
  • 一般來說,head是list的虛拟頭,依次取list上的各個節點

    container_of(ptr, type, member)

  • ptr:現已知的指針
  • type:要求的結構體類型
  • member:指針在結構體中的名稱
  • 該宏用于在已知結構中某個成員位址的情況下,求得結構體的起始位址

兩個連用

haproxy中結構體間常含list成員,用于将多個節點串在一起,在依次取各節點成員的時候,需要上述兩個宏搭配使用。

list_for_each(pos_scad, sp->current_server_cad) {
    s_cad = container_of(pos_scad, struct server_cad, srv_link);
}           

依次取得各server_cad的位址,友善下面對該節點進行取值或指派。

繼續閱讀