web-dev-qa-db-ja.com

GLIBCとは何ですか?それは何のために使われますか?

C標準ライブラリのソースコードを探していました。たとえば、cos、abs、printf、scanf、fopen、および他のすべての標準C関数がどのように記述されているかということです。つまり、ソースコードを見ることです。

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

34
user1261015

標準Cライブラリの実装は、C標準に加えて、厳密に標準ではないが頻繁に使用されるいくつかの特別な有用なものに記載されています。

主な内容は次のとおりです。

1)ANSI、c99、c11規格に記述されているCライブラリ。マクロ、シンボル、関数実装などが含まれます(printf()、malloc()など)

2)POSIX標準ライブラリ。システムコールの「ユーザーランド」グルー。 (open()、read()など。実際にはglibcはシステムコールを「実装」しません。カーネルはそれを行います。しかし、glibcはカーネルが提供するサービスへのユーザーランドインターフェイスを提供します。関数。

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

「力を使い、情報源を読む」

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

(glibcでmalloc.cを見たとき、私は最近かなり啓発されました)

49
Aftnix

標準にはいくつかの実装があります。 Glibcは、ほとんどのLinuxが使用する実装ですが、他にもあります。 Glibcには、(Aftnixが述べているように)カーネルへのジャンプ(システムコールとも呼ばれます)のシーンをセットアップするグルー関数も含まれています。 glibcの「関数」の多くは実際の作業を行わず、カーネルに委任するだけです。

Glibcのソースを読むには、グーグルで検索してください。それを運ぶ無数のサイトがあり、いくつかのバリエーションもあります。

WindowsはMicrosoft独自の実装を使用していますが、これはMSVCR.DLLと呼ばれます。そのライブラリのソースコードはどこにでもあるとは思いません。また、Linuxハッカーが「標準」と考える可能性のある一部の機能は、Windows(特にfork)には存在しないことに注意してください。その逆も同様です。

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

10
jforberg

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

7
Sandy

次に、いくつかの「実践的な」視点を示します。