linuxのメモ

Linux kernelの実装を解説していきます (対象ver 4.5)

ユーティリティー - container_of()

概要

アドレスから、そのアドレスが示す値が含まれる型の開始アドレスを取得する

詳細

このマクロでは以下の引数を受け取る

  • 対象の構造体へのポインタ : ptr
  • 対象の構造体を含む構造体の型を示す : type
  • 対象の構造体を含む構造体のうち、対象の構造体のメンバ名を示す : member

ptrのアドレスからoffsetof()type型のmemberまでのオフセット値を減算した値を算出することで、type型の変数の開始アドレスを取得する

また、返り値はtype型でキャストされるため呼び出し元の関数では正しい型のポインタとしてアドレスを取得することができる