ID非公開

2021/7/21 15:51

33回答

[glibcとシステムコールラッパーについて] Cライブラリであるglibcとwrite(2)などのシステムコールラッパーの関係性が理解できません。

C言語関連 | Unix系39閲覧

ベストアンサー

0

ThanksImg質問者からのお礼コメント

よく理解できました。 迅速な回答ありがとうございました。

お礼日時:7/29 12:19

その他の回答(2件)

0

はい、システムコールラッパーは、 「右から左にそのままカーネルに処理をまわす」 ものです。 ですから、システムコールラッパーの仕様は、完全にOSのカーネルの仕様になっています。 逆に glibc にある関数は、OSの仕様からは独立しています。

0

int 0x80 ということは x86 Linux (32bit) ですかね。 ちなみに x86_64 Linux (64bit) では処理が重い ソフトウエア割り込みではなく システムコール専用の命令 (syscall) を使います。 そして狭義の Linux はカーネルのみです。 https://www.mztn.org/lxasm64/x86_x64_table.html > Linux のカーネルソースの arch/x86/include/asm/ 以下の > unistd_32.h と unistd_64.h にはシステムコールの > 名称と番号の対応が定義されています。 この定義に沿って libc (C標準関数) を実装するならば 別に glibc である必要はありません。 Android もカーネルとして Linux を使っていますが libc は Google が開発した bonic ですし、 組み込み Linux 向けとしては uClibc 等があります。 いずれも libc 内では syscall 実行までを行います。 ちなみに Windows の場合は Win32/64 API を用いることを 前提としており、Windows のバージョンが異なっても API は同一に保たれますが、システムコールに関しては 引数等に一部互換性が無いそうです。