在这个过程中,我发现了GLIBC,但我不知道它实际上是什么。它是GNU C Library,并包含一些源代码,但它们到底是什么,是标准函数的源代码还是其他东西?它有什么用途呢?
在这个过程中,我发现了GLIBC,但我不知道它实际上是什么。它是GNU C Library,并包含一些源代码,但它们到底是什么,是标准函数的源代码还是其他东西?它有什么用途呢?
这是实现了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,让我有些大开眼界)
标准有几种实现方式,其中大多数Linux使用的是Glibc,但也有其他实现方式。Glibc还包含(如Aftnix所述)设置场景以进行跳转到内核(也称为系统调用)的粘合函数。因此,Glibc的许多“函数”并不执行实际工作,而只是委托给内核。
要阅读Glibc源代码,只需搜索即可。有无数的网站提供这些资源,还有几种变体。
Windows使用微软自己的实现方式,我相信称为MSVCR.DLL。我怀疑你在任何地方都找不到该库的源代码。还要注意的是,一些Linux黑客可能认为是“标准”的函数在Windows上不存在(特别是fork)。反之亦然。
其他系统将拥有自己的libc。
glibc软件包包含系统中多个程序使用的标准库。为了节省磁盘空间和内存,以及使升级更容易,通用系统代码被保存在一个地方,并在程序之间共享。该软件包包含最重要的共享库集:标准C库和标准数学库。没有这两个库,Linux系统将无法正常工作。glibc软件包还包含国家语言(区域设置)支持。
strlen
:
是的,这是标准库函数的实现。
更具体地说,这是所有GNU系统和几乎所有使用Linux内核的*NIX系统的实现。