首页 > 编程笔记 > Linux笔记 阅读:20

Linux C标准库简介(新手必看)

Linux 系统调用接口是内核空间与用户空间之间的桥梁,用户空间的程序通过这些系统调用来访问内核功能。然而,用户空间的程序通常不会直接调用这些底层的系统调用。为简化这一过程,Linux 系统引入了标准 C 库(C Standard Library 或 libc),它为开发者提供了一组简化接口,便于访问操作系统资源。

标准C库的功能

标准 C 库在用户空间中扮演了重要的中介角色。它不仅是对系统调用的简单包装,还通过优化和扩展,提升了使用上的便利性。虽然有些库函数基于系统调用添加了少量逻辑(如参数检查和设置),但有些函数也提供了更高层次的功能。

例如,fopen() 不仅提供了文件操作接口,还通过文件缓冲等机制,简化了文件的读写管理。

标准 C 库提供了丰富的宏、类型定义和函数,涵盖了字符串处理、数学运算、输入/输出处理、内存管理等操作系统服务。虽然许多函数封装了系统调用,但标准 C 库通过一致、优化的接口,简化了程序与操作系统的交互,使开发者无须直接处理复杂的底层系统调用。在跨平台开发中,标准 C 库显著提高了代码的可移植性,并减少了对资源管理的复杂操作。

以下是标准 C 库中常见的库函数及其作用:
通过这些抽象和封装,标准 C 库极大简化了用户空间程序对内核资源的调用,提升了开发效率,并增强了代码的可移植性。

常用的标准C库

市面上有多个标准 C 库的实现版本,不同的版本通常有不同的用途和功能。其中最常用的是 glibc,它是 Yocto 项目中默认使用的 C 库版本。

下表列出了常见的标准 C 库及其描述。

表:常见的标准 C 库
标准C库实现 描述 Yocto项目支持 许可
GNU C Library (glibc) GNU C 库,广泛用于 Linux 和其他 GNU 系统。提供完整的 C 标准库实现,支持多种架构和系统调用,是最常用的 C 库之一。 支持 GNU LGPL v2.1
musl 轻量级 C 库,专为高效、简洁和与 POSIX 标准的兼容而设计,常用于嵌入式和容器化的 Linux 系统。 支持 MIT
uClibc-ng uClibc 的一个分支,适用于内存有限的嵌入式系统,支持 MMU 和非 MMU 架构,提供基本的 C 标准库功能。 支持 GNU LGPL v2.1
Bionic Android 系统的标准库,源于 BSD libc,专为移动设备设计,优化了性能和存储空间。 不支持 BSD/GPL v2
BSD libc 由多个 BSD 衍生操作系统提供的 C 标准库,符合 POSIX 标准,适用于 UNIX 风格的系统。 不支持 BSD
Microsoft C run-time library 微软 C 运行库分为 MSVCRT 和 UCRT:前者为早期可再发行库,后者为 Windows 10 及之后的默认 C 库,支持 C99 标准。 不支持 专有/微软
dietlibc 极简 C 库,专为小型系统设计,适用于嵌入式和无 MMU 环境,功能比标准 C 库有限。 不支持 GPL
Newlib 专为嵌入式系统设计的 C 标准库,适用于资源有限的系统,是 Cygwin 环境下的默认 C 库。 不支持 BSD
klibc 专门用于 Linux 内核启动的轻量 C 库,提供简化的 POSIX 接口,用于引导过程中的基础任务。 支持 BSD
picolibc 小型嵌入式系统的 C 库,适合 RAM 受限的环境,基于 Newlib 和 AVRLibc 进行开发。 不支持 BSD

相关文章