《Unix环境高级编程》Note——第二章Unix标准及实现

Unix标准及实现

1.引言

不同的Unix版本提供的C语言接口不尽相同,本章介绍Unix的C语言接口标准。

2.Unix标准化

1. ISO C标准:ANSI(美国国家标准协会),ISO(国际标准化组织),ISO C标准由ISO/IEC的WG14(简称)维护,ISO C标准有89和99版本以及01、04和07的技术勘误发布,该标准不仅仅为了兼容Unix,而是为了提供C程序的可移植性
2. IEEE POSIX标准:POSIX是由IEEE制定的标准族,POSIX是可移植操作系统接口,主要指的是IEEE标准的1003.1以及相关扩展,IEEE 1003.1-1988递交给ISO后经ISO修改文本作为IEEE1003.1-1990出版,即POSIX.1标准,而后又经历了更新和修订,08年IEEE发布了POSIX.1第7版,经ISO批准为ISO/IEC9945:2009;
3. Single Unix Specification标准:SUS(Single Unix Specification)是基于POSIX.1的一个扩展,主要是Unix系统及类Unix系统的标准。POSIX.1中的X/Open系统接口(XSI)选项描述了可选的接口及其依赖。10年公布了SUSv4版;
3. FIPS标准:代表联邦信息处理标准,由美国政府发布。

3.Unix系统实现

Unix系统起源于PDP-11系统上运行的Unix分时系统第6版(1976年)和第7版(1979年)(通常被称为V6和V7),由上述起源演进出三个分支:
(1)AT&T分支(系统III和系统V,商用分支);
(2)加州伯克利分支(4.xBSD实现);
(3)贝尔实验室分支(Unix分时系统第8版、第9版,终止于90年第10版);
1. SVR4:SVR4是AT&T的Unix实验室(USL)的产品,AT&T也出版了系统V接口定义(SVID),SVID只定义接口,对于一个SVR4的具体实现应查看其手册;
2. 4.4BSD:BSD是由加州伯克利的计算机系统研究组(CSRG)开发的,4.4BSD-Lite第2发行版是CSRG的最后一个BSD版本;
3. FreeBSD:FreeBSD是基于4.4BSD-Lite的,且在一段时间后为了坚持BSD系列而产生的;
4. Linux:Linux是Linus为了替代MINIX而开发的;
5. Mac OS X:使用了很多不同的技术,核心系统为“Darwin”;
6. Solaris:是由Sun Microsystems(现为Oracle)开发的Unix版本,基于SVR4;
7. 其它Unix系统:AIX(IBM版),HP-UX(HP版),IRIX(Silicon Graphics版)以及UnixWare(SVR4派生)。

4.标准和实现的关系

标准定义了任一系统实现的子集。本书以FreeBSD8.0,Linux3.2.0,Mac OS X10.6.8和Solaris10为环境讲解。

5.限制

Unix系统实现定义了很多幻数和常量,导致了编译时限制(如短整型的最大值)和运行时限制(如文件名有多少个字符)。为解决限制问题,提供了
(1)编译时限制(头文件);
(2)与目录或文件无关的运行时限制(sysconf函数);
(3)与目录或文件有关的运行时限制(pathconf函数和fpathconf函数);
1. ISO C限制:ISO C定义的编译时限制都列在头文件<limits.h>中,其它有些在<stdio.h>中;
2. POSIX限制:POSIX.1定义了很多涉及操作系统实现限制的常量,可以分成7类,某些定义在<limits.h>中,某些在其它文件中,某些不定义;
3. XSI限制:XSI定义了代表实现限制的几个常量,如最小值、运行时不变值;
4. 函数sysconf、pathconf和fpathconf:可用sysconf、pathconf和fpathconf来获得运行时限制;
5. 不确定的运行时限制:e.g, 路径名 & 最大打开文件数;

6.选项

有一些标准定义的可选功能,可移植程序可能需要事先获知某些选项是否被实现,POSIX.1定义了3种处理选项的办法:
(1)编译时选项定义在头文件<unistd.h>中;
(2)与目录或文件无关的运行时选项用sysconf函数判断;
(3)与目录或文件有关的运行时选项用pathconf函数和fpathconf函数判断;

7.功能测试宏

头文件定义了很多POSIX.1和XSI符号,但除此之外不同的版本具体实现也加入了很多自己的定义,当想编译一个只与POSIX相关的程序时,那么就需要定义常量_POSIX_C_SOURCE,常量_POSIX_C_SOURCE及_XOPEN_SOURCE被称为功能测试宏。可以在cc命令行中定义,也可以在源文件第一行定义。

8.基本系统数据类型

某些Unix系统变量已经与C数据类型联系在一起,头文件<sys/types.h>中定义了某些与实现有关的数据类型,它们被称为基本系统数据类型,还有很多这种数据类型定义在其他文件中。在头文件中,这种数据类型都是用C的typedef来定义的,它们绝大多数以_t结尾(如clock_t);

9.标准之间的冲突

ISO与POSIX.1之间存在一些很小的冲突,但冲突以ISO为准,如ISO和POSIX.1都定义了同一种数据类型(clock_t)来保存对时间的测量,但定义了不同的单位;还如POSIX环境下,某些函数可能要求有一个与C环境下不同的实现。
本章整理了Unix的一些标准以及一些实现,及其一些需要注意的地方。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值