56

我正在寻找 C 标准库的源代码。我的意思是,例如,cos、abs、printf、scanf、fopen 和所有其他标准 C 函数是如何编写的,我的意思是看它们的源代码。

所以在搜索这个时,我遇到了 GLIBC,但我不知道它到底是什么。它是 GNU C 库,它包含一些源代码,但它们实际上是什么,它们是标准函数的源代码还是其他东西?它是用来做什么的?

4

5 回答 5

67

它是 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 时,我最近非常开明)

于 2012-07-12T21:38:31.557 回答
13

该标准有多种实现方式。Glibc 是大多数 Linux 使用的实现,但也有其他实现。Glibc 还包含(如 Aftnix 所述)为跳转到内核(也称为系统调用)设置场景的粘合函数。许多 glibc 的“函数”并不做实际的工作,而只是委托给内核。

要阅读 Glibc 的源代码,只需 google 即可。有无数的网站可以携带它,也有几种变体。

Windows 使用微软自己的实现,我相信它被称为 MSVCR.DLL。我怀疑您是否会在任何地方找到该库的源代码。另请注意,Linux 黑客可能认为是“标准”的某些功能在 Windows 上根本不存在(尤其是 fork)。反之亦然。

其他系统将有自己的 libc。

于 2012-07-12T21:55:27.583 回答
9

glibc 包包含系统上多个程序使用的标准库。为了节省磁盘空间和内存,以及使升级更容易,公共系统代码被保存在一个地方并在程序之间共享。这个特定的包包含最重要的共享库集:标准 C 库和标准数学库。没有这两个库,Linux 系统将无法运行。glibc 包还包含国家语言(区域设置)支持。

于 2012-12-23T12:02:21.207 回答
2

是的,它是标准库函数的实现。

更具体地说,它是所有 GNU 系统和几乎所有使用 Linux 内核的 *NIX 系统的实现。

于 2012-07-12T21:20:05.287 回答
1

以下是一些“动手”的观点:

于 2018-11-03T20:19:12.110 回答