附录 C 常用的 Linux C 语言函数库
本附录列出 Linux 的常见发行版(如 RedHat Linux)中包含的函数库。除特别指
出外,这些函数库的使用和发行适用 GPL 条款或 LGPL 条款。
需要注意的是,Linux 上的函数库正在以非常快的速度增加和更新,这里列出的函
数库只是其中的一小部分。如果读者要在 Linux 上进行开发,最好先了解一些是否有
一些可供直接利用的函数库,以避免重复开发。有关 Linux 上的应用和函数库开发
,可访问如下站点:
http://www.linux.orghttp://www.linuxstart.comhttp://www.linuxnow.comhttp://www.linuxresource.comhttp://www.ee.mu.oz.au/linux/programming/The Linux Programmer’s BounceP
oint)
C.1 CrackLib
CrackLib 为用户提供了一个 C 语言函数接口,利用这一函数,可避免用户选择容
易破解的密码。该函数库可在类似 passwd 的程序中使用。
C.2 GLib
GLib 作为 GTK+ 的一个组件,提供了操作通用数据结构,如链表、树、哈希表、内
存分配等等在内的 C 函数库。
C.3 glibc
众所周知,C 语言并没有为常见的操作,例如输入/输出、内存管理,字符串操作等
提供内置的支持。相反,这些功能一般由标准的“函数库”来提供。
GNU 的 C 函数库,即 glibc,定义了 ISO C 标准指定的所有的库函数,以及由 PO
SIX 或其他 UNIX 操作系统变种指定的附加特色,还包括有与 GNU 系统相关的扩展
。
glibc 基于如下标准:
ISO C:C 编程语言的国际标准。GNU C 函数库与美国国家标准局(ANSI)公布的 C
标准兼容。这一标准后来被国际标准化组织所接收(ISO/IEC 9899:1990)。
POSIX:操作系统的 ISO/IEC 9945(即 IEEE 1003)标准。GNU C 函数库实现了 ISO/
IEC 9945-1:1996 (POSIX 系统应用程序编程接口,即 POSIX.1)指定的所有函数。
该标准是对 ISO C 的扩展,包括文件系统接口原语、设备相关的终端控制函数以及
进程控制函数。同时,GUN C
函数库还支持部分由 ISO/IEC 9945-2:1993(POSIX Shell 和 工具标准,即 POSIX
.2)指定的函数,其中包括用于处理正则表达式和模式匹配的函数。
Berkeley Unix:BSD 和 SunOS。GNU C 函数库定义了某些 UNIX 版本中尚未标准化
的函数,尤其是 4.2 BSD, 4.3 BSD, 4.4 BSD Unix 系统(即“Berkeley Unix”)以
及“SunOS”(大众化的 4.2 BSD 变种,其中包含有某些Unix System V 的功能)。
BSD 函数包括符号链接、select
函数、BSD 信号处理函数以及套接字等等。
SVID:System V 的接口描述。System V 接口描述(SVID)是描述 AT&T Unix Syst
em V 操作系统的文档,它是对 POSIX 标准的扩展超集。GNU C 函数库定义了大多数
由 SVID 指定而未被 ISO C 和 POSIX 标准指定的函数。来自 System V
的支持函数包括进程间通信和共享内存、hsearch 和 drand48 函数族、fmtmsg 以
及一些数学函数。
XPG:X/Open 可移植性指南。X/Open 可移植性指南(由 X/Open Company, Ltd.出
版),是比 POSIX 更为一般的标准。X/Open 拥有 Unix 的版权,而 XPG 则指定成为
Unix 操作系统必须满足的需求。GNU C 函数库遵循 X/Open 可移植性指南(Issue
4.2)以及所有的 XSI(X/Open
系统接口)兼容系统的扩展,同时也遵循所有的 X/Open Unix 扩展。
C.4 Imlib
Imlib 是一个一般性的图象装载和渲染库。利用 Imlib,可简化在 X-Window 系统
中装载图象并获得可绘制对象的工作。它提供了图象渲染的快速操作函数,同时也为
<耐枷蟛僮魈峁┘虻サ牟僮骼獭
Imlib 的特色有:
在完整编译的情况下,Imlib 可在无其他应用程序的帮助下,装载 PPM、PGM、TIFF
、PNG、XPM、JPEG 和 EIM 格式的图象,并保留它们的透明特征。对于一些 Imlib
并不支持的图象格式,它可依赖一组系统工具将这些图象格式转换为 Imlib 可理解的
格式,然后进行处理,这样,Imlib
能够处理其他工具所能支持的任意格式。当前,Imlib 支持 Imagemagick 和 PBMPL
US 工具。利用外来工具时,装载过程要慢一些。
Imlib 拥有图象缓存功能。程序员可以编写一些直接性的代码,而不需要过多考虑
性能问题。图象被装入之后,会缓存起来。如果图象仍然在缓存中,就没有必要重新
叭肓耍恍璐踊捍嬷幸酶猛枷蟆S谑牵势拥闹苯有源肽芄槐3纸峡斓闹葱兴
俣取
Imlib 可以对图象进行任意倍数的缩放(限制在 32767 x 32767 象素)。这意味着
仅通过一个函数调用,就可以将小的图标放大,或者将大的图象缩减为指甲大小的图
象。
Imlib 可通过灰度、亮度、对比度或任意的曲线映射关系提高图象的可视度,或修
饰其外观。它允许进行灰度校正、白点校正或其他高级特色,而不需要其他硬件支持
Imlib 可完成基本的图象修饰(翻转、旋转等)。
Imlib 经过严格的优化,因此可以最高的速度获得最好的结果。根据 X Server 和
硬件的能力,可选择不同的选项提高其渲染处理的速度。
Imlbi 可处理许多显示深度。能够在单色、2、3、4、5、6、7、8 位的伪色彩以及
静态颜色的系统上工作。它也可以在 15 位、16 位(555 和 565)、以及 24 位的色
彩系统上工作。
在对图象以不同的大小进行渲染时,Imlib 具有高级的 pixmap 缓存,可以重复使
用,进而提供渲染速度。
Imlib 分别具有 Xlib 和 GDK 的版本,也可以同时安装。这两个版本共享同一个配
置文件。
C.5 libgHTTP
HTTP 是针对 WWW 底层传输机制的协议。该协议具有良好的文档并被广泛实现。而
该协议的使用通常和 Web 联系在一起,但该协议的使用却可以扩展到任何一个适合的
地方。libgHTTP 就是一个完全和 HTTP 1.1 (RFC 2068 的第五次修改草案中定义)
兼容的函数库。libgHTTP
的设计非常简单而且易于使用。
C.6 LibGTop
LibGTop 是一个能够获取进程信息以及系统运行信息的函数库,这些信息包括:
系统的一般信息
cpu - CPU 的使用信息
mem - 内存使用信息
swap - 交换使用信息(包括分页活动)
loadavg - 负载的平均水平(包括可运行进程数目、进程总数目和上一次运行的进
程标识号等)
uptime - 启动后的时间以及空闲时间,可从 CPU 的使用信息中计算得到。
SYS V IPC 限制
shm_limits - 共享内存的限制信息
msg_limits - 消息队列的限制信息
sem_limits - 信号量的限制信息
进程列表
proclist - 进程列表
进程信息
proc_state - cmd, state, uid, gid
proc_uid - uid, euid, gid, egid, pid, ppid, pgrp session, tty, tpgid, pri
ority, nice
proc_mem - size, vsize, resident, share, rss, rss_rlim
proc_time - start_time, rtime, utime, stime, cutime, cstime, timeout, it_
real_value, frequency
proc_signal - signal, blocked, sigignore, sigcatch
proc_kernel - k_flags, min_flt, maj_flt, cmin_flt, cmaj_flt, kstk_esp, ks
tk_eip, nwchan, wchan
proc_segment - text_rss, shlib_rss, data_rss, stack_rss, dirty_size start
_code, end_code, start_stack
进程映射
proc_map - 进程映射(Linux 下的/proc/<pid>/映射
文件系统使用信息:
mountlist - 当前挂装文件系统列表
fsusage - 文件系统使用信息
C.7 libpng
PNG 指可移植的网络图象文件格式(Portable Network Graphic)。libpng 则是 P
NG 规范对应的 C 函数库,其目的是减少在应用程序中为支持 PNG 文件格式而需要
花费的时间和精力。PNG 规范(RFC 2083)以及相关文档、最新的 libpng 库可从如
下站点获得:
ftp://ftp.uu.net/graphics/png/documents/图片url地址
http://www.w3.org/TR/REC.png.htmlftp://ftp.uu.net/graphics/png/documents/http://www.cdrom.com/pub/png/libpng 的最终目的是,在任何需要使用 PNG 文件格式的地方均能够获得 libpng
的支持。libpng 有如下特色:
可同时处理多个会话。
易于修改。
可移植到许多不同的平台上,包括ANSI、K&R、16-位、32-位以及 64-位等。
易于使用。
是线程安全的,可用于多线程的应用程序。
需要注意的是,libpng 使用 zlib 完成 PNG 文件的压缩和解压,因此,系统中需
要安装有 zlib 库(下面讲述)。
C.8 libtiff
libtiff 提供了对 TIFF(Tag Image File Format)的支持。TIFF 是广泛用于保存
图象数据的格式。libtiff 包含如下功能:
读写 TIFF 的函数接口。
提供了在 UNIX 系统上对 TIFF 图象进行简单操作的工具。
C.9 GNU Libtool
GNU Libtool 实际是一个脚本生成工具,它可以为软件包开发者提供一般性的共享
库支持。
以前,如果源代码包的开发者要利用共享库的优点,则必须为每个软件包可支持的
平台编写定制的支持代码。并且还需要设计配置接口,以便软件包的安装程序能够正
费≡褚⒌目饫嘈汀@?GNU
Libtool,则可以简化开发者的这一工作。它在一个单独的脚本中同时封装了与平台
相关的依赖性以及用户界面。GNU Libtool 可使每个宿主类型的完整功能可通过一般
性的接口获得,同时为程序员隐藏了宿主的特殊性。
GNU Libtool 一致性接口是可靠的,用户不必阅读那些晦涩的文档,以便在每个平
台上建立共享库。他们只需运行软件包的配置脚本,而由 libtool 完成繁复的工作。
C.10 libungif
GIF 是指 Graphics Interchange Format 规范。libungif 包含了一组用来处理 GI
F 图象的可移植工具和库例程。最新版本可从如下站点获得;
http://www.ccil.org/~esr/gifliblibungif包含了用来剪切、旋转、缩放和定位 GIF 图象的程序。包括一个 X11 查
看器、将 GIF 输出到 Epson 兼容打印机的的代码,以及许多转换工具。
函数库中包括了读取和写入 GIF 文件的库例程,在 GIF 文件中嵌入 8x8 字体的工
具函数,以及错误处理例程等。
C.11 svgalib
svgalib 是一个底层图形库,可在 Linux 的虚拟终端上运行。svgalib 支持许多常
见的 SVGA 卡,包括 Trident TVGA 9440、S3 Trio64 等。
SVGA 包括如下功能:
函数库的初始化;
查询硬件配置,包括鼠标、芯片组和监视器;
设置显示模式;
获取显示模式信息;
绘图原语,包括画点、扫描线等基本绘图功能;
基本的键盘 I/O,区别于原始(RAW)模式;
直接的 VGA 内存访问;
颜色调色板支持;
鼠标处理支持;
原始键盘处理,以原始访问读取键盘设备,从而可获得对键盘的完全控制;
游戏棒支持;
虚拟终端切换功能;
SVGA 卡的加速特性支持等。
C.12 zlib
zlib 是一个通用的数据压缩库。代码是线程安全的,可用于支持多线程应用程序。
zlib 库支持的数据格式包括RFC 1950 到 1952 中描述的文件格式:
zlib 格式,由
ftp://ds.internic.net/rfc/rfc1950.txt描述;
deflate 格式,由
ftp://ds.internic.net/rfc/rfc1951.txt描述;
gzip 格式:由
ftp://ds.internic.net/rfc/rfc1952.txt描述;
C.13 字符界面函数库
UNIX 系统对字符界面的支持是非常完善的。在 Linux 系统中,可在如下几个层次
上进行字符界面编程:
1.利用 ANSI 的标准输入/输出函数,例如 printf,scanf 等。
2.利用 termcap 函数库。termcap 函数库实际利用定义在 TERMinal CAPabilitie
(终端能力,/etc/termcap)数据库中的信息获得对如下特殊操作的支持:
特殊字符的显示;
字符的插入、删除以及行的插入、删除等操作;
终端初始化。
但是 termcap 函数库只提供了对终端的底层访问,而颜色属性、参数化输出和优化
等工作,需要应用程序自己完成。
3.使用 terminfo 数据库。TERMinal INFOrmation (终端信息,usr/lib/terminf
o/[A-z][0-9])基于 termcap 数据库,也提供了对终端能力的描述,但较 termcap
高级。利用 terminfo 数据库,程序可方便地改变屏幕属性,并使用诸如功能键在内
的特殊按键。
4.curses 函数库。curses 函数库基于 terminfo 数据库提供了更加高级的终端访
问能力。利用 curses 可打开并操作屏幕上的窗口,而且 curses 还提供了完整的输
入和输出函数集合,可修改 150 种之多的终端的视频属性。
5.ncurses 函数库。ncurses 是对 ncrses 函数库的提高和扩展。它和 SVr4 兼容
,并提供了某些扩展,包括颜色操作、输出的特殊优化等等。在 Linux 系统中,ncu
rses 是使用最为广泛的字符界面函数库,许多基于字符界面的配置工具,如 netcon
f,均是基于 ncurses 的程序。