我正在寻找C标准库的源代码。我的意思是,例如,cos、abs、printf、scanf、fopen 和所有其他标准 C 函数是如何编写的,我的意思是查看它们的源代码。
所以在寻找这个时,我遇到了 GLIBC,但我不知道它到底是什么。它是GNU C Library,它包含一些源代码,但它们实际上是什么,它们是标准函数的源代码还是其他东西?还有它是用来做什么的?
它是 C 标准中描述的标准 C 库的实现,加上一些额外有用的东西,这些东西不是严格标准的,但经常使用。
其主要内容是:
ANSI、c99、c11 标准中描述的 C 库。它包括宏、符号、函数实现等(printf()、malloc()等)
POSIX 标准库。系统调用的“用户区”粘合剂。 (open(),read()等。实际上glibc并没有“实现”系统调用。内核做到了。但是glibc为内核提供的服务提供了用户态接口,以便用户应用程序可以像普通应用程序一样使用系统调用功能。
还有一些非标准但有用的东西。
“使用武力,阅读来源”
$git clone git://sourceware.org/git/glibc.git
(最近当我查看 glibc 中的 malloc.c 时,我很受启发)
该标准有多种实施方式。 Glibc 是大多数 Linux 使用的实现,但还有其他实现。 Glibc 还包含(如 Aftnix 所说)粘合函数,用于设置跳转到内核的场景(也称为系统调用)。 glibc 的许多“功能”并不执行实际工作,而只是委托给内核。
要阅读 Glibc 的源代码,只需 google 即可。有无数的网站提供它,也有几个变体。
Windows使用微软自己的实现,我相信它被称为MSVCR.DLL。我怀疑您是否能在任何地方找到该库的源代码。另请注意,Linux 黑客可能认为是“标准”的某些功能在 Windows 上根本不存在(尤其是 fork)。反之亦然。
其他系统会有自己的libc。
glibc 软件包包含系统上多个程序使用的标准库。为了节省磁盘空间和内存,以及使升级更容易,公共系统代码被保存在一处并在程序之间共享。这个特定的包包含最重要的共享库集:标准 C 库和标准数学库。没有这两个库,Linux 系统将无法运行。 glibc 软件包还包含国家语言(区域设置)支持。
以下是一些“亲身实践”的观点:
strlen
:
是的,就是标准库函数的实现。
更具体地说,它是所有 GNU 系统以及几乎所有使用 Linux 内核的 *NIX 系统的实现。