作者:lbjf_887 | 来源:互联网 | 2024-11-30 14:49
GNU发布的glibc是Linux系统中最基础的C运行库,提供了一系列底层API,几乎所有其他运行库都依赖于它。本文详细介绍了glibc的主要功能和服务,并探讨了其在系统开发中的重要性。
glibc 是 GNU 发布的 libc 库,即 C 运行库。它是 Linux 系统中最底层的应用程序开发接口(API),几乎所有其他运行库都依赖于 glibc。glibc 不仅封装了 Linux 操作系统提供的系统服务,还提供了许多其他必要的功能服务。以下是 glibc 提供的主要功能:
- 字符串处理(string)
- 信号处理(signal)
- 管理共享库的动态加载(dlfcn)
- 文件目录操作(direct)
- 共享库的动态加载器(elf,即 interpreter)
- 不同字符集的编码转换(iconv)
- socket 接口的实现(inet)
- 国际化支持(gettext 实现,即 intl)
- 输入输出操作(io)
- 线程管理(linuxthreads)
- 本地化(locale)
- 虚拟终端设备管理及系统安全访问(login)
- 动态内存分配与管理(malloc)
- 网络信息服务(nis)
- 其他基本功能(stdlib)
glibc 囊括了几乎所有的 UNIX 通行标准,如 System V 和 POSIX 标准。这些标准确保了 glibc 的内容包罗万象,支撑起整个操作系统。glibc 的文件分布在系统的树状目录结构中,主要包括:
- 共享函数库(.so 文件),分布在 /lib 和 /usr/lib 目录中,包括标准 C 函数库(libc)、数学函数库(libm)、加密与编码函数库(libcrypt)、数据库函数库(libdb)、多线程函数库(libpthread)和网络服务函数库(libnss)等。
- 函数库头文件和开发组件,头文件以 .h 结尾,位于 /usr/include/ 目录下,包含函数库中各函数的声明、宏定义和数据类型的定义。
- 静态链接库(.a 文件)和目标文件(.o 文件),位于 /usr/lib/ 目录中,用于编译过程中将代码与函数库链接为可执行文件。
- 函数库说明文档,通常位于 /usr/man 或 /usr/share/man 目录下,统称为 manpages,分为多个章节,其中第二章(man2)介绍系统调用,第三章(man3)介绍标准 C 函数库。
- 字集转换模块和区域化数据库,位于 /usr/lib/gconv/、/usr/lib/locale/、/usr/share/locale/ 和 /usr/share/i18n/ 目录中,支持国际化和本地化。
- 时区数据库,位于 /usr/share/zoneinfo 目录下,包含世界各地时区与格林威治时间的转换数据。
- 其他工具程序和配置文件,位于 /usr/bin 和 /sbin 目录下,包括 iconv、locale、localedef、ldd 和 ldconfig 等工具,相关配置文件位于 /etc 目录下。
glibc 在 GNU/Linux 系统的发展中扮演了重要角色。早期的 GNU/Linux 系统不支持共享库,所有应用程序都以静态链接方式存在于系统中。直到 1995-1996 年,随着 libc5 的出现,系统开始支持 ELF 共享库,C 函数库的功能也得到了显著增强。然而,libc5 在国际化和本地化方面支持较差,直到 GNU/Linux 采用 glibc-2.0 作为 C 函数库后,国际化和本地化支持才逐渐成熟。
glibc 支持多种标准和规范,包括 ISO C、POSIX、Berkeley Unix、SVID 和 XPG,确保了在 glibc 下开发的程序可以轻松移植到其他 UNIX 平台。这些标准和规范涵盖了 C 语言的语法、标准函数库、系统调用、工具程序和系统内核特性等多个方面。