web-dev-qa-db-ja.com

なぜglibcはカーネルヘッダーを必要とするのですか?

GlibcのようなプログラムがLinuxカーネルヘッダーを必要とするのはなぜですか? Linux APIはsyscallを介して提供され、muslなどの他のlibc実装はこれらのヘッダーを必要としません。

Glibcが特別な理由は何ですか?

3
user361212

Syscallは、呼び出しメカニズムを除いて、通常の関数呼び出しと同じです。通常のC関数呼び出しと同様に、呼び出された関数が期待するパラメーターとタイプ、および戻り値を知る必要があります。例として、struct statへのポインタをパラメータとして受け取るstatシステムコールを見てください。カーネルとユーザースペースのコードは、データがどのように構造化されているかについて合意する必要があり、これの型定義の最も信頼のおけるソースはカーネルです。

現在、カーネルAPIには安定性が保証されているため、これらのデータ型が変更されることはめったにありません。したがって、Muslの開発者は、カーネルヘッダーに依存するよりも、手動で編集した定義のコピーを維持する方が簡単であることに気付きました。 Muslソースコードには、たとえば、ファイルArch/x86_64/bits/syscall.h.inに独自のシステムコール番号のリストが含まれています。

2
Johan Myréen