glibc

 

glibc

百科名片

glibc是gnu发布的libc,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。由于 glibc 囊括了几乎所有的 UNIX 通行的标准,可以想见其内容包罗万有。而就像其他的 UNIX 系统一样,其内含的档案群分散于系统的树状目录结构中,像一个支架一般撑起整个作业系统。在 GNU/Linux 系统中,其C函式库发展史点出了GNU/Linux 演进的几个重要里程碑,用 glibc 作为系统的C函式库,是GNU/Linux演进的一个重要里程碑。

目录

功能实现
GLIBC 的内容
GLIBC 的规格
简短说明

功能实现

  主要的如下:
  (1)string,字符串处理
  (2)signal,信号处理
  (3)dlfcn,管理共享库的动态加载
  (4)direct,文件目录操作
  (5)elf,共享库的动态加载器,也即interpreter
  (6)iconv,不同 字符集的编码转换
  (7)inet,socket接口的实现
  (8)intl,国际化,也即gettext的实现
  (9)io
  (10)linuxthreads
  (11)locale,本地化
  (12)login,虚拟终端设备的管理,及系统的安全访问
  (13)malloc,动态内存的分配与管理
  (14)nis
  (15)stdlib,其它基本功能

GLIBC 的内容

  由于 glibc 囊括了几乎所有的 UNIX 通行的标准,可以想见其内容包罗万有。而就像其他的 UNIX 系统一样,其内含的档案群分散于系统的树状目录结构中,像一个支架一般撑起整个作业系统。以 glibc-2.2 为例,这些档案群主要包括:
  1.分享函式库群:
  这是 glibc 的主体,分布 /lib 与 /usr/lib 中,包括 libc 标准 C 函式库、libm 数学函式库、libcrypt 加密与编码函式库、libdb 资料库函式库、libpthread 行程多执行绪函式库、libnss 网路服务函式库 .... 等等。这些都是可分享函式库,档名都以 .so 做结尾。其中,/lib/ld*.so 是程式与函式库连结的工具。有的用于程式编译时将程式与函式库内的函式物件连结,在只支援静态连结的系统中,此连结方式就是直接将所需的物件自函式库中抽出?砼c程式的可执行档相连,而在支援可分享函式库的系统中,在程式编译时期的连结只是在执行档中纪录了那些函式物件是存在那个函式库档案中,等该程式开始执行时,则由另一个负责动态连结的 ld*.so 将所需的函式库连结好?K执行。
  一般而言,负责程式编译时期的连结器档名为 ld. so,而负责程式执行时的动态连结器档名为 ld- .so 或 ld-linux. so (在 GNU/Linux 系统中)。
  函式库标头档与程式开发元件:
  这些标头档档名都以 .h 为结尾,全部在 /usr/include/ 底下,其内容为函式库中各函式的宣告、巨集定义、资料物件的型别 .... 等等,这些都是程式开发者不可或缺的部分。
  除此之外,在 /usr/lib/ 中还有若干 .o 与 .a 的档案,这些是程式编译过程中要连结为可执行档时所需的元件,有些则为上述可分享函式库的静态连接版本,而后者可以在某些特殊场合下需要静态连结程式时使用。
  函式库说明文件:
  在一般的 UNIX 系统下,这些说明文件是放在 /usr/man 或 /usr/share/man 底下,统称为 man pages,其底下还分若干章节,其中第二章 (man2) 讲的是系统呼叫,而第三章 (man3) 讲的就是 libc 标准函式库,这些都是系统开发者重要的参考资料。
  而在 GNU 的系统中,除了 man pages 之外,还有一套称为 info 的文件资料系统,而且里头的说明往往比 man pages 还要详尽,这在 glibc 中也不例外。glibc 的 info 文件位于 /usr/share/info/libc. info* ,本文中有许多素材就是取自这些文件的内容。
  字集转换模组与区域化资料库:
  这些是与程式国际化与本土化相关的部分,主要可分成四大块: /usr/lib/gconv/ 内含大量的字集转换模组,大部分是各种字集及编码方式与系统的基底字集之间的 转换。第二块是 /usr/lib/locale,内含以系统基底字集写成的区域化资料库 (locale),像是 LC_CTYPE、LC_TIME .... 等等。第三块是
  /usr/share/locale/,内含可跨平台使用的区域化资料,主要是各应用程式的信息翻译部分。而最后一块是 /usr/share/i18n/,其内容是各区域化资料库的原始码,以及系统支援的内码对应表 .... 等等。
  时区资料库:
  主要分别在 /usr/share/zoneinfo 底下,内含世界各地时区与 格林威治时间的转换资料。
  其他工具程式与设定档:
  工具程式分?言 /usr/bin 与 /sbin 底下,包括一些转码与区域化资料库相关的程式如 iconv, locale, localedef 等,以及用?盹@示应用程式与可分享函式库相依关系的 ldd, 还有可分享函式库搜寻路?焦芾沓淌 ldconfig .... 等。而其相关的设定档则位于 /etc 底下。
  disaos
  03-11-03, 10:42

GLIBC 的规格

  在 GNU/Linux 系统中,其 C 函式库的发展史点出了 GNU/Linux 演进的几个重要里程碑,由此可以突显出 C 函式库在系统中的地位与重要性。早期的 GNU/Linux 系统?K不支援可分享函式库,因此所有的应用程式都是以静态连结的方式存于系统中。直到 1995-1996 年 libc5 问世以后,系统才开始支援 ELF 可分享函式库,同时该版的 C 函式库也?作了其他 UNIX 上大部分的功能与函式群,可谓 GNU/Linux 发展上的一大进步。
  然而 libc5 在程式国际化 (I18N) 与本土化 (L10N) 方面的支援很差,故那个时候若要开发所谓中文化的程式,就非得自行?作一套标准不可。直到一两年后, GNU/Linux 换用了 GNU 所开发的 glibc-2.0 做为其 C 函式库后,其国际化与本土化的支援才开始起步,后?须v经 glibc-2.1,到了现在的 2.2 版,整个多国语文的开发环境才大至成熟。
  用 glibc 做为系统的 C 函式库,是 GNU/Linux 演进的一个重要里程碑。在 GNU 的计划中,开发 glibc 原本是要给他们尚未问世的核心 GNU/Hurd 用的,由于当时几乎 99% 的 GNU 系统工具已开发完成,就独缺核心 Hurd,而恰巧 Linux 核心在 Torvalds 的带领下已逐?u成熟稳定,而且可以顺利执行所有的 GNU 系统工具。故 GNU 团队便顺应 Linux 核心的特性,改写了他们的 glibc,使其可以适用于 Hurd 核心与 Linux 核心。如此,在这两个平台上就有了一致的 程式开发环境,使得所有的 GNU 程式可以在这两个平台之间顺利移植。
  比起过去的 libc5,glibc 系列 (一般又称之为 libc6) 除了有完整的国际化与本土化支援外,同时还符合许多标准与规格,使得在 glibc 下开发的程式可以很容易移植到其他 UNIX 平台去。这些标准包括:
  ISO C:
  ISO C 是 International Standard for the C programming language 的缩写,此标准明定了 C 语言的语法,标准 C 函式库应具备那些标头档、巨集定义、函式与物件 .... 等等,几乎在任何平台上的 C 语言 (包括非 UNIX 平台) 都支援此标准。
  POSIX:
  POSIX 是 Portable Operating System Interface for Computer Environments 的缩写,它是 ISO C 的延伸,明定了一个可移植的作业系统所应具备种种条件,其范围不只有系统函式库而已,还同时包括一些标准的工具程式、系统核心应有的特色与?作、以及在 C 函式库中某些与作业系统相关的低阶控制支援 (如系统呼叫窗口) 等等。由于 glibc 是完全按照 POSIX 的标准制作的,同时搭配了符合 POSIX 标准的 Linux 核心,故在此环境下开发的程式可以做到完全符合 POSIX 的规格。
  Berkeley Unix:
  Berkeley Unix 泛称柏克莱大学所开发的 UNIX 系列作业系统,包括 4.2 BSD、4.3 BSD、4.4 BSD 以及早期的 SunOS。这些系统的 C 函式库中有许多杰出的设计,但却没有在上述两个标准中,包括 select() 函式、sockets .... 等等,这些在 glibc 中都有支援。
  SVID:
  SVID 是 System V Interface Description 的缩写,它是一份描述 AT&T UNIX System V 系统规格的文件,它是 POSIX 标准的延伸。Glibc ?作了大部分的 SVID 规格要求,其中较重要的包括了行程之间的通?标准以及分享式记忆体 (shared memory),至于其他的部分则较不常使用。?作 SVID 主要的目的是希望可以做到与 UNIX System V 的相容与程式的可移植性。
  XPG:
  XPG 是 X/Open Portability Guide 的缩写,是由 X/Open Company, Ltd. 所发表,同时 X/Open 还拥有 UNIX 商标的版权。而这份规格不但是 POSIX 标准的扩充,同时也明定了一个 UNIX 作业系统所应符合的要求。其中包括了 iconv() 字集转换介面,以及部分 BSD 与 SVID 的特色。
  除了上述的规格外,glibc 还内含了 GNU 特有的特色,称之为 GNU Extension。这些特色在某些情况下可以方便程式的撰写与维护,但就不见得可以移植到其他 UNIX 平台上,故在可移植性的考量下使用时必须留意。
  安装下列程序: catchsegv, gencat, getconf, getent, glibcbug, iconv, iconvconfig, ldconfig, ldd, lddlibc4, locale, localedef, mtrace, nscd, nscd_nischeck, pcprofiledump, pt_chown, rpcgen, rpcinfo, sln, sprof, tzselect, xtrace, zdump 和 zic
  安装下列库文件: ld. so, libBrokenLocale.[a,so], libSegFault. so, libanl.[a,so], libbsd-compat.a, libc.[a,so], libc_nonshared.a, libcrypt.[a,so], libdl.[a,so], libg.a, libieee.a, libm.[a,so], libmcheck.a, libmemusage. so, libnsl.a, libnss_compat. so, libnss_dns. so, libnss_files. so, libnss_hesiod. so, libnss_nis. so, libnss_nisplus. so, libpcprofile. so, libpthread.[a,so], libresolv.[a,so], librpcsvc.a, librt.[a,so], libthread_db. so 和 libutil.[a,so]

简短说明

  catchsegv 当程序发生segmentation fault的时候, 用来建立一个堆栈跟踪。
  gencat 建立消息列表。
  getconf 针对文件系统的指定变量显示其系统设置值。
  getent 从 系统管理数据库获取一个条目。
  glibcbug 建立glibc的bug报告并且email到bug报告的邮件地址。
  iconv 转化字符集。
  iconvconfig 建立快速读取的iconv模块所使用的设置文件。
  ldconfig 设置动态链接库的实时绑定。
  ldd 列出每个程序或者命令需要的共享库。
  lddlibc4 辅助 ldd 操作目标文件。
  locale 是一个 Perl 程序,可以告诉 编译器打开或关闭内建的locale支持。
  localedef 编译locale标准。
  mtrace...
  nscd 提供对常用名称设备调用的缓存的守护进程。
  nscd_nischeck 检查在进行NIS+侦查时是否需要安全模式。
  pcprofiledump 打印PC profiling产生的信息。
  pt_chown 是一个辅助程序,帮助grantpt设置子 虚拟终端的属主,用户组和读写权限。
  rpcgen 产生实现RPC协议的C代码。
  rpcinfo 对 RPC服务器产生一个RPC呼叫。
  sln 用来创建符号链接,由于它本身是静态连接的,在动态连接不起作用的时候,sln仍然可以建立符号链接。
  sprof 读取并显示共享目标的特征描述数据。
  tzselect 对用户提出关于当前位置的问题,并输出时区信息到标准输出。
  xtrace 通过打印当前执行的函数跟踪程序执行情况。
  zdump 显示时区。
  zic 时区编译器。
  ld. so 帮助动态链接库的执行。
  libBrokenLocale 帮助程序处理破损locale,如Mozilla。
  libSegFault 处理 segmentation fault 信号,试图捕捉segfaults。
  libanl 异步名称查询库。
  libbsd-compat 为了在linux下执行一些BSD程序,libbsd-compat提供了必要的可移植性。
  libc 是主要的C库--常用函数的集成。
  libcrypt 加密编码库。
  libdl 动态连接接口。
  libg g++的运行时。
  libieee IEEE浮点运算库。
  libm 数学函数库。
  libmcheck 包括了启动时需要的代码。
  libmemusage 帮助 memusage 搜集程序运行时内存占用的信息。
  libnsl 网络服务库。
  libnss* 是名称服务切换库,包含了解释主机名,用户名,组名,别名,服务,协议等等的函数。
  libpcprofile 帮助内核跟踪在函数, 源码行和命令中CPU使用时间。
  libpthread POSIX 线程库。
  libresolv 创建,发送及解释到互联网域名服务器的数据包。
  librpcsvc提供RPC的其他服务。
  librt 提供了大部分的POSIX.1b实时扩展的接口。
  libthread_db 对建立多线程程序的调试很有用。
  libutil 包含了在很多不同的 Unix程序中使用的“标准”函数。
  Glibc 安装依赖关系
  Glibc 依赖于: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Gettext, Grep, Make, Perl, Sed, Texinfo [1] .
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
glibc2.3.1是GNU C Library的一个版本,是一个开源的C库,用于支持基于Linux系统的应用程序。它提供了许多功能和工具,使开发者能够编写高性能和可靠的应用程序。 首先,glibc2.3.1提供了丰富的API,可以用于处理文件、内存、进程、线程等操作。开发者可以使用这些API来编写应用程序,并与操作系统进行交互。此外,glibc2.3.1还提供了各种数据结构和算法的实现,以及对网络编程和多线程编程的支持,使开发者能够轻松地编写复杂的应用程序。 其次,glibc2.3.1还提供了对国际化和本地化的支持。开发者可以使用glibc的国际化功能来处理不同语言和地区的字符集、日期、时间等,以便确保应用程序在全球范围内能够正确地运行。 此外,glibc2.3.1还提供了一些安全性的功能,如缓冲区溢出的防护机制和堆栈隔离等。这些功能有助于开发者编写更加安全的应用程序,防止恶意代码的利用。 最后,glibc2.3.1是一个开源项目,可以免费使用和修改。这意味着开发者可以根据自己的需求对其进行定制,并贡献自己的改进和修复。这也使得glibc2.3.1成为开发者们在Linux系统上进行应用程序开发的首选库之一。 总之,glibc2.3.1是一个功能强大、可靠性高的C库,提供了广泛的API和功能,用于支持Linux系统上的应用程序开发。它的存在使得开发者能够更加轻松地编写高性能、可靠和安全的应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值