glibcのようなプログラムにLinuxカーネルヘッダファイルが必要なのはなぜですか? Linux APIはシステムコールを介して提供され、他のlibc実装(例:musl)にはこれらのヘッダーは必要ありません。
glibcを特別にする理由は何ですか?
ベストアンサー1
呼び出しメカニズムを除いて、システム呼び出しは通常の関数呼び出しと変わりません。通常のC関数呼び出しと同様に、呼び出された関数に必要なパラメータと型、戻り値が何であるかを知る必要があります。たとえば、stat
ポインタを引数として使用するシステムコールを見てくださいstruct stat
。カーネルとユーザー空間コードは、データの構造化方法に同意する必要があり、型定義の最終ソースはカーネルです。
カーネル API の信頼性の保証により、これらのデータ型はほとんど変更されません。したがって、Musl開発者は、カーネルヘッダファイルに頼るよりも、手動で編集された定義コピーを維持する方が簡単であることを知りました。たとえば、Muslソースコードには、ファイルに独自のシステムコール番号のリストが含まれていますarch/x86_64/bits/syscall.h.in
。