これら2つの用語が同じ意味で使用されていることがあります。
これら2つの用語の実際の違いは何ですか?それらはどのように異なって使用されますか?これら2つのライブラリに代わるものは他にありますか?
C標準ライブラリ はCプログラミング言語の一部であるため、specification(一部のテクニカルレポートでは英語で記述) )。たとえば、 n1570 ドキュメントは、malloc
の概要とその動作を説明しています。
また、 C POSIXライブラリ (多かれ少なかれC標準ライブラリのスーパーセット)の関連仕様もあります。たとえば、dlopen
とfork
はどちらもPOSIXで指定されています(C11標準では無視されます)。
GNU glibc ライブラリは、C標準ライブラリ(およびそのスーパーセット)とC POSIXライブラリの実装です。これは free software (ほとんどがCで書かれているGCC方言に少しのアセンブラーが含まれている) システムコールを使用している ( syscalls(2) にリストされている) kernel によって処理されます。C標準の他の実装を使用できます musl-libc (または dietlibc )のようなライブラリ。
アセンブラコードを書くことで、libc
を回避し、カーネルに直接システムコールを行うことができます。これはめったに行われません( Bones Schemeコンパイラ、または BusyBox など)。ほとんどのプログラムはlibc
を通じてシステムコールを実行し、そのlibc
によって提供される関数を利用します。したがって、libc
はLinuxシステムの基礎です...
ちなみに、GNU glibcには、 backtrace functions などの標準外の便利な関数や、 プログラムの引数 を解析します。
標準が要求するものと実際に何が起こるかの間には微妙な違いがあることに注意してください(たとえば、 memory overcommitment はmalloc
に非標準的な方法で影響します)、またはLinux dlopen
には [〜#〜] posix [〜#〜] が必要とするよりも多くのフラグがあります)。
Linuxのman
ページは、一般に、標準への準拠が関数であることを説明しています。 dlopen(3) で例を探してください。
Cのすべての実装は標準ライブラリを提供する必要がありますが、すべてのCコンパイラがFSFによって作成されているわけではありません。したがって、GNU CコンパイラはGNU Cライブラリを使用し、IntelのCコンパイラは別の標準ライブラリを使用します(あまり目立たない名前)。両方ともC標準が必要とする標準ライブラリのインスタンス化。
「GNU」の代わりに「UNIX」を読んだ場合、用語は同じものだったので長い間交換可能でした。
BSDが開発されるまで、AT&TのUNIXライブラリは[〜#〜] the [〜#〜] Cライブラリでした-コンパイラが[〜#〜] the [〜#だったためです〜] Cコンパイラ(ほとんどの場合)。
BSDの後には、System V UNIX、BSD UNIX、GNU(GNU's Not Unix))があり、すぐにどこにでもCコンパイラがあり、それぞれに標準ライブラリの独自の実装がありました。