Linux 的编程常识

2008-02-23 05:06:30来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

标准 (ANSI C, POSIX, SVID, XPG, ...)

函数库和系统调用

在线文档 (man, info, HOW-TO, ...)

C 语言编程风格

库和头文档的保存位置

共享库及其相关配置

1.4.1 标准 (ANSI C, POSIX, SVID, XPG, ...)
ANSI C:这一标准是 ANSI(美国国家标准局)于 1989 年定制的 C 语言标准。 后来被 ISO(国际标准化组织)接受为标准,因此也称为 ISO C。
ANSI C 的目标是为各种操作系统上的 C 程式提供可移植性确保,而不但仅限于 UNIX。 该标准不但定义了 C 编程语言的语发和语义,而且还定义了一个标准库。这个库能够根据 头文档划分为 15 个部分,其中包括:字符类型 ()、错误码 ()、 浮点常数 ()、数学常数 ()、标准定义 ()、 标准 I/O ()、工具函数 ()、字符串操作 ()、 时间和日期 ()、可变参数表 ()、信号 ()、 非局部跳转 ()、本地信息 ()、程式断言 () 等等。
POSIX:该标准最初由 IEEE 研发的标准族,部分已被 ISO 接受为国际标准。该标准的具体内容 见 1.1.3。POSIX.1 和 POSIX.2 分别定义了 POSIX 兼容操作系统的 C 语言系统接口 连同 shell 和工具标准。这两个标准是通常提到的标准。
SVID:System V 的接口描述。System V 接口描述(SVID)是描述 AT&&;T Unix System V 操作 系统的文档,是对 POSIX 标准的扩展超集。
XPG:X/Open 可移植性指南。X/Open 可移植性指南(由 X/Open Company, Ltd.出版), 是比 POSIX 更为一般的标准。X/Open 拥有 Unix 的版权,而 XPG 则指定成为 Unix 操作系统必须满足的需要。
1.4.2 函数库和系统调用
1. glibc
众所周知,C 语言并没有为常见的操作,例如输入/输出、内存管理,字符串操作等提供内置的支持。相反,这些功能一般由标准的“函数库”来提供。GNU 的 C 函数库,即 glibc,是 Linux 上最重要的函数库,他定义了 ISO C 标准指定的任何的库函数,连同由 POSIX 或其他 UNIX 操作系统统变种指定的附加特色,还包括有和 GNU 系统相关的扩展。现在,流行的 Linux 系统使用 glibc 2.0 以上的版本。glibc 基于如下标准:

ISO C: C 编程语言的国际标准,即 ANSI C。
POSIX: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 的接口描述。GNU C 函数库定义了大多数由 SVID 指定而未被 ISO C 和 POSIX 标准指定的函数。来自 System V 的支持函数包括进程间通信和共享内存、 hsearch 和 drand48 函数族、fmtmsg 连同一些数学函数。
XPG:X/Open 可移植性指南。GNU C 函数库遵循 X/Open 可移植性指南(Issue 4.2) 连同任何的 XSI(X/Open 系统接口)兼容系统的扩展,同时也遵循任何的 X/Open Unix 扩展。
2. 其他重要函数库
除 glibc 之外,流行的 Linux 发行版中还包含有一些其他的函数库,这些函数库具备重要地位,例如:

GNU Libtool:GNU Libtool 实际是个脚本生成工具,他能够为软件包研发者提供一般性 的共享库支持。
以前,假如源代码包的研发者要利用共享库的长处,则必须为每个软件包可支持的平台编写 定制的支持代码。并且还需要设计配置接口,以便软件包的安装程式能够正确选择要建立的 库类型。利用 GNU Libtool,则能够简化研发者的这一工作。他在一个单独的脚本中同时封装 了和平台相关的依赖性连同用户界面。GNU Libtool 可使每个宿主类型的完整功能可通过 一般性的接口获得,同时为程式员隐藏了宿主的特别性。GNU Libtool 一致性接口是可靠的, 用户不必阅读那些晦涩的文档,以便在每个平台上建立共享库。他们只需运行软件包的配置 脚本,而由 libtool 完成繁复的工作。
CrackLib:CrackLib 为用户提供了一个 C 语言函数接口,利用这一函数,可避免用户选择 容易破解的密码。该函数库可在类似 passwd 的程式中使用。
LibGTop:LibGTop 是个能够获取进程信息连同系统运行信息的函数库,这些信息包括: 系统的一般信息、SYS V IPC 限制、进程列表、进程信息、进程映射、文档系统使用信息等。
图像文档操作函数库:包括 libungif、libtiff、libpng、Imlib 等,可分别用来操作 GIF、TIFF、PNG 连同其他一些格式图像文档。
3. 系统调用
系统调用是操作系统提供给外部程式的接口。在 C 语言中,操作系统的系统调用通常通过函数调用的形式完成,这是因为这些函数封装了系统调用的细节,将系统调用的入口、参数连同返回值用 C 语言的函数调用过程实现。在 Linux 系统中,系统调用函数定义在 glibc 中。

谈到系统调用时,需要注意如下几点:

系统调用函数通常在成功时返回 0 值,不成功时返回非零值。假如要检查失败原因,则 要判断 errno 这个全局变量的值,errno 中包含有错误代码。
许多系统调用的返回数据通常通过引用参数传递。这时,需要在函数参数中传递一个 缓冲区地址,而返回的数据就保存在该缓冲区中。
不能认为系统调用函数就要比其他函数的执行效率高。要注意,系统调用是个很耗时 的过程。
有关系统调用我们将在以后周详讲述。

1.4.3 在线文档 (man, info, HOW-TO, ...)
1. man
man,即 manunal,是 UNIX 系统手册的电子版本。根据习惯,UNIX 系统手册通常分为不同的部分(或小节,即 section),每个小节阐述不同的系统内容。现在的小节划分如下:

命令:普通用户命令
系统调用:内核接口
函数库调用:普通函数库中的函数
特别文档:/dev 目录中的特别文档

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: Linux下的多进程编程初步

下一篇: Linux 文档访问原语