C常用的LinuxC语言函数库

本附录列出 Linux 的常见发行版(如 RedHat Linux)中包含的函数库。除特别指出外,这些函数库的使用和发行适用 GPL 条款或 LGPL 条款。

需要注意的是,Linux 上的函数库正在以非常快的速度增加和更新,这里列出的函数库只是其中的一小部分。如果读者要在 Linux 上进行开发,最好先了解一些是否有一些可供直接利用的函数库,以避免重复开发。有关 Linux 上的应用和函数库开发,可访问如下站点:

http://www.linux.org
http://www.linuxstart.com
http://www.linuxnow.com
http://www.linuxresource.com
http://www.ee.mu.oz.au/linux/programming/(The Linux Programmer’s BouncePoint)

C.1 CrackLib

CrackLib 为用户提供了一个 C 语言函数接口,利用这一函数,可避免用户选择容易破解的密码。该函数库可在类似 passwd 的程序中使用。

C.2 GLib

GLib 作为 GTK+ 的一个组件,提供了操作通用数据结构,如链表、树、哈希表、内存分配等等在内的 C 函数库。

C.3 glibc

众 所周知,C 语言并没有为常见的操作,例如输入/输出、内存管理,字符串操作等提供内置的支持。相反,这些功能一般由标准的“函数库”来提供。

GNU 的 C 函数库,即 glibc,定义了 ISO C 标准指定的所有的库函数,以及由 POSIX 或其他 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 System 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 和 PBMPLUS 工具。利用外来工具时,装载过程要慢一些。


Imlib 拥有图象缓存功能。程序员可以编写一些直接性的代码,而不需要过多考虑性能问题。图象被装入之后,会缓存起来。如果图象仍然在缓存中,就没有必要重新装入 了,而只需从缓存中引用该图象。于是,质朴的直接性代码能够保持较快的执行速度。


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, priority, 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, kstk_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 则是 PNG 规范对应的 C 函数库,其目的是减少在应用程序中为支持 PNG 文件格式而需要花费的时间和精力。PNG 规范(RFC 2083)以及相关文档、最新的 libpng 库可从如下站点获得:

ftp://ftp.uu.net/graphics/png/documents/
http://www.bccn.net/Article/UploadFDL0024/200511/20051103153926982.png.html
ftp://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 包含了一组用来处理 GIF 图象的可移植工具和库例程。最新版本可从如下站点获得;

http://www.ccil.org/~esr/giflib

libungif包含了用来剪切、旋转、缩放和定位 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/terminfo/[A-z][0-9])基于 termcap 数据库,也提供了对终端能力的描述,但较 termcap 高级。利用 terminfo 数据库,程序可方便地改变屏幕属性,并使用诸如功能键在内的特殊按键。

4.curses 函数库。curses 函数库基于 terminfo 数据库提供了更加高级的终端访问能力。利用 curses 可打开并操作屏幕上的窗口,而且 curses 还提供了完整的输入和输出函数集合,可修改 150 种之多的终端的视频属性。

5.ncurses 函数库。ncurses 是对 ncrses 函数库的提高和扩展。它和 SVr4 兼容,并提供了某些扩展,包括颜色操作、输出的特殊优化等等。在 Linux 系统中,ncurses 是使用最为广泛的字符界面函数库,许多基于字符界面的配置工具,如 netconf,均是基于 ncurses 的程序。
收藏  | 打印  | 字体:  -缩小  放大+    
[ x ] 请正确填写下面信息


是否保存此网页快照 是否公开此收藏

查看全部评论(3)我来说两句