2012-07-12 36 views
17

私はC標準ライブラリのソースコードを探していました。私が意味することは、例えば、cos、abs、printf、scanf、fopen、そして他のすべての標準的なC関数がどのように書かれているかということです。GLIBCとは何ですか?それは何のために使われますか?

これを探しているうちに、私はGLIBCに出会いましたが、実際にはわかりません。これはGNU Cライブラリであり、いくつかのソースコードが含まれていますが、実際にはそれらは標準関数のソースコードですか、それとも何か他のものですか?それは何のために使われていますか?

+2

[GNU Cライブラリ](http://en.wikipedia。org/wiki/Glibc) - ウィキが言っているように、GNUのC標準ライブラリの実装です(GNUの実装に特有のものが追加されています)。 – birryree

+12

本当ですか?この質問の[tags]の上にマウスを置くと、答えが得られました。あなたは最近[非常によく似た質問](http://stackoverflow.com/questions/9672006/where-can-i-find-the-source-code-for-all-the-c-standard-libraries)に尋ねました。 –

答えて

33

標準Cライブラリは、C標準で記述されていますが、厳密には標準ではありませんが、頻繁に使用されます。

その主な内容は以下のとおりです。

1)Cライブラリは、ANSI、C99、C11の規格で説明します。マクロ、シンボル、関数の実装など(printf()、malloc()など)

2)POSIX標準ライブラリ。システムコールの "ユーザランド"グルー。 (open()、read()など)glibcは実際にはシステムコールを実装していませんが、glibcはカーネルのサービスにユーザランドインタフェースを提供するので、機能。

3)また、いくつかの非標準的なしかし有用なもの。

(私はglibcの中malloc.cを通して見たとき、私は最近、かなり悟りを開いた)標準のいくつかの実装があります

1

はい、標準ライブラリ関数の実装です。

具体的には、すべてのGNUシステムと、Linuxカーネルを使用するほぼすべての* NIXシステムの実装です。

7

$git clone git://sourceware.org/git/glibc.git 

は「ソースを読んで、力を使います」。 Glibcは、ほとんどのLinuxが使用する実装ですが、他にもあります。 Glibcには、Aftnixの状態として、カーネルにジャンプするためのシーンを設定するグルー関数(システムコールとも呼ばれます)が含まれています。 glibcの '関数'の多くは実際の作業を行うのではなく、カーネルに委譲するだけです。

Glibcのソースを読むには、ちょうどそれをgoogleしてください。それを運ぶ無数のサイトといくつかのバリエーションがあります。

WindowsはMSVCR.DLLと呼ばれるMicrosoft独自の実装を使用しています。私はあなたがそのライブラリのどこにでもソースコードを見つけることは疑問です。また、Linuxハッカーが「標準」と考えるかもしれないいくつかの機能は、単にWindows上に存在しない(特にフォーク)ことに注意してください。その逆も真です。

他のシステムには独自のlibcがあります。

+2

Microsoftは、CランタイムのソースコードをVisual Studioに同梱しています。しかし何らかの理由で浮動小数点ルーチンへのソース(またはそれらの公平なチャンク)は含まれません。たぶん、彼らはおそらくソース配布を許可しない第三者からライセンスを受けているのでしょうか?私は、MSがランタイムの他の部分よりもIPの重要な部分であると考えていれば驚かれるだろう。 –

6

glibcパッケージには、システム上の複数のプログラムで使用される標準ライブラリが含まれています。ディスクスペースとメモリを節約し、アップグレードを容易にするために、一般的なシステムコードは1か所にあり、プログラム間で共有されます。この特定のパッケージには、共有ライブラリの最も重要なセットである標準Cライブラリと標準の数学ライブラリが含まれています。これら2つのライブラリがなければ、Linuxシステムは機能しません。 glibcパッケージには、各国語(ロケール)のサポートも含まれています。

関連する問題