C标准库或libc是ANSI C标准中规定的C编程语言的标准库,它与C库POSIX规范是同时制定的,POSIX规范是它的超集,由于ANSI C被国际标准化组织采用,C标准库也被称为ISO C库。
C标准库为字符串处理、数学计算、输入/输出处理、内存管理等任务以及其他一些操作系统服务提供了宏、类型定义和函数。
什么是CRT?
CRT是指C运行时库(C run-time library) 。最早的时候,C 语言被开发出来时,Dennis Ritchie 和 Brian Kernighan 就用 C 语言重写了 90% 以上的 UNIX 系统函数,并且把其中最常用的部分独立出来,形成头文件和对应的 library,C run-time library 就是这样形成的。
随着 C 语言的流行,各个 C 编译器的生产商/个体/团体都遵循老的传统,在不同平台上都有相对应的 Standard Library,但大部分实现都是与各个平台有关的。由于各个 C 编译器对 C 的支持和理解有很多分歧和微妙的差别,所以就有了 ANSI C;ANSI C (主观意图上)详细的规定了 C 语言各个要素的具体含义和编译器实现要求,引进了新的函数声明方式,同时订立了 Standard Library 的标准形式。所以C运行时库由编译器生产商提供。至于由其他厂商/个人/团体提供的头文件和库函数,应当称为第三方 C 运行库(Third party C run-time libraries)。
如果没有CRT,
main()
就不会被调用,
exit()
也不能被响应。因为CRT包含了C程序运行的最基本和最常用的函数。
不同的编译器有不同的CRT,微软的编译器是MSVC,其CRT全名为Microsoft Visual C++ C Runtime,是Windows下的C运行时库。GCC提供的CRT则是glibc,全名为GNU C Library,作为Linux下的C运行时库。
glibc 官方地址
要想更多了解其CRT详细信息及MSVC相关用法,可查看
MSVC 官方中文文档
进行学习,也可以直接查看其标准库实现源码,在安装了最新的
VS2019
的机器上,我的CRT源码路径为
D:\Windows Kits\10\Source\10.0.18362.0\ucrt
,大家可以据此找到自己的源码路径。而对于glibc,则可以去上述官网下载源码学习,或者查看其
glibc 官方手册
学习函数
作为一个主要关注移动设备的开发者,我们可能对Android的CRT更感兴趣。实际上谷歌并没有使用内容比较杂乱的glibc,而是专门为Android设备重新开发了一套全新的CRT,它就是
bionic
,其源码位于Android系统的主体源码仓库中,不过有人单独检出了源码并放到了GitHub上,可用于学习。
bionic
地址
另外,这里再给出一个中文版
C语言标准文档
,既可以查询C语言的标准语法,也可查看库函数用法。
标准库头文件
C89标准共划分成15个头文件,C99新增了9个,总共有24个:
<setjmp.h>
提供了
setjmp
函数和
longjmp
函数。
setjmp
函数会“标记”程序中的一个位置,随后可以用
longjmp
返回被标记的位置。这些函数可以用来从一个函数跳转到另一个(仍然活动中的)函数中,而绕过正常的函数返回机制
<signal.h>
提供了用于处理异常情况(信号)的函数,包括中断和运行时错误。
signal
函数可以设置一个函数,使系统会在给定信号发生后自动调用该函数;
raise
函数用来产生信号
<stdarg.h>
提供了一些工具用于编写参数个数可变的函数
<stddef.h>
提供了经常使用的类型和宏的定义
<stdio.h>
提供了大量的输入/输出函数,包括对顺序访问和随机访问文件的操作
<stdlib.h>
包含了大量无法划归其他头的函数。包含在此头中的函数可以将字符串转换成数,产生伪随机数,执行内存管理任务,与操作系统通信,执行搜索与排序,以及在多字节字符与宽字符之间进行转换
<string.h>
提供了用于进行字符串操作(包括复制、拼接、比较及搜索)的函数以及对任意内存块进行操作的函数
<time.h>
提供相应的函数来获取时间(和日期),操纵时间,以及格式化时间的显示
C99新增头:
NetBSD
libc
OpenBSD
libc
uClibc
它是用于开发嵌入式Linux系统的小型C库。它比GNU C库小得多,但是glibc支持的几乎所有应用程序也可以与uClibc完美配合
Dietlibc
专为最小的二进制文件设计的C标准库
C POSIX库
C POSIX库是一个针对POSIX系统的C标准库的规范。它是与ANSI C标准同时开发的。为了使POSIX与标准C兼容,做了一些努力;POSIX包括标准C中引入的附加功能。
C POSIX库头的文件
由 Apache 社区维护的 C 开源库,主要提供操作系统相关的功能(文件系统、进程、线程、用户、IPC)。此外还提供了一些网络相关的功能。原先是 Apache Web 服务器的一个组成部分,后来独立出来,成为一个单独的开源项目。
libVLC
开源 (VLC SDK)媒体框架,著名的支持各种媒体格式的VLC播放器的核心
是一个跨平台的开发库,旨在通过 OpenGL 和 Direct3D 为音频、键盘、鼠标、操纵杆和图形硬件提供低级访问
TCC(Tiny C Compiler)是一个快速的轻量级的C语言编译器
http-parser
用C编写的HTTP消息解析器。它解析请求和响应。 该解析器旨在用于高性能的HTTP应用中。 它不进行任何系统调用或分配,也不缓冲数据,可以随时中断。 根据你的架构,每个消息流(在每个连接的Web服务器中)仅需要大约40字节的数据。
全面的C语言的第三方库介绍,查看
awesome-c
关注公众号:编程之路从0到1
Your browser is out-of-date!
Update your browser to view this website correctly.
Update
my browser now