首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

《UNIX环境高级编程》札记-UNIX标准化及实现

2013-10-08 
《UNIX环境高级编程》笔记--UNIX标准化及实现1.UNIX标准化1.1.ISO C1989年后期,C程序设计语言的ANSI(America

《UNIX环境高级编程》笔记--UNIX标准化及实现
1.UNIX标准化1.1.ISO C1989年后期,C程序设计语言的ANSI(American National Standards Institute)标准X3.159-1989得到批准(ANSI 1989)。此标准已被采用为国际标准ISO/IEC 9899:1990。1999年,ISO C给根性为ISO/IEC 9899:1999。按照ISO C标准定义了各个头文件(header),可将ISO C库分成24个区。下表列出了C标准定义的各个头文件。《UNIX环境高级编程》札记-UNIX标准化及实现


1.2.IEEE POSIXPOSIX是一系列由IEEE(Institute of Electrical and Electronics Engineers)制定的标准,POSIX(Portable Operating SystemInterface)是指可移植的操作系统接口。POSIX标准通常被称为POSIX.1,下面各表总结了POSIX.1指定的必需和可选的头文件。因为POSIX.1包含ISO C标准库函数,所以还需要ISO C中列出的头文件。POSIX标准定义的必需的头文件《UNIX环境高级编程》札记-UNIX标准化及实现

POSIX标准定义的XSI扩展头文件《UNIX环境高级编程》札记-UNIX标准化及实现

POSIX标准定义的可选头文件《UNIX环境高级编程》札记-UNIX标准化及实现

POSIX接口可以分为必需接口和可选接口,可选接口按功能又进一步分成50个区,下表总结了没有被弃用的编程接口。《UNIX环境高级编程》札记-UNIX标准化及实现

1.3.Single UNIX SpecificationSingle UNIX Specification(单一UNIX规范)是POSIX.1标准的一个超集,它定义了一些附加的接口,这些接口扩展了POSIX.1规范所提供的功能。相应的系统接口全集被称为X/open系统接口(XSI,X/Open System Interface)。__XOPEN_UNIX符号常量标识了XSI扩展的接口。XSI还定义了必须支持POSIX.1中的哪些可选部分才能认为是遵循XSI的(表中的SUS强制要求),只有遵循XSI的实现才能成为UNIX系统。
1.4.FIPSFIPS的含义是联邦信息处理标准(Federal Information Processing Standard),它是由美国政府出版,用于计算机系统的采购,因为FIPS的影响正逐步减退,所以在本书中不再进一步考虑它。
2.UNIX系统实现UNIX主要有三个分支:1.AT&T分支,导出了系统Ⅲ和系统Ⅴ(UNIX商用版本)2.加州大学伯克利分校分支,导出了4.xBSD实现。3.AT&T贝尔实验室的计算机科学研究中心开发的UNIX研究版本,导出UNIX分时系统第8,9版以及于1990年发布的最后一版第10版。
UNIX系统主要有:SVR4:UNIX SystemⅤ release 4.4.4BSD:加州大学伯克利分校的计算机系统研究组研究开发和分发的。FreeBSD:加州大学伯克利分校的计算机系统研究组决定终止其在UNIX操作系统的BSD版本上的研发中作后,设立了FreeBSD项目。LINUX:其实不是UNIX,linux使用的是linux内核,只是提供了UNIX编程环境Mac OS X:核心操作系统成为Darwin,基于Mach内核和FreeBSD系统的组合。Solaris:由Sun公司开发的UNIX系统版本。AIX:IBM版的UNIX。HP-UX:HP版的UNIX。IRIX:Silicon Graphics版的UNIX。Unix Ware:SVR4派生的UNIX系统。3.限制UNIX系统实现定义了很多变量和常量,而且每个实现可能都不一样,为了能够促进标准化(有助于软件的可移植性),使用以下两种类型的限制:1.编译时限制(例如:短整型最大值是多少?)2.运行时限制(例如:文件名可以有多少个字符?)对于上面的2中限制具体是怎么实现的呢:1.编译是限制(使用头文件)2.不与文件或目录相关联的运行时限制(使用sysconf函数)3.与文件或目录相关联的运行时限制(使用pathconf函数和fpathconf函数)
3.1.ISO C限制ISO C定义的限制都是编译时限制。限制的常量都定义在头文件中,而且在一个系统中不会改变,例如在linux系统的/usr/include/limits.h文件中定义了ISO C限制。
3.2.POSIX限制POSIX.1的限制和常量被分成下列5类。1.不变的最小值,如下图所示:《UNIX环境高级编程》札记-UNIX标准化及实现2.不变值:SSIZE_MAX3.运行时可以增加的值:CHARCLASS_NAME_MAX,COLL_WEIGHTS_MAX,LINE_MAX,NGROUPS_MAX和RE_DUP_MAX。4.运行时不变的值(可能不确定):ARG_MAX,CHILD_MAX,HOST_NAME_MAX,LOGIN_NAME_MAX,OPEN_MAX,PAGE_SIZE,   RE_DUP_MAX,STREAM_MAXS,SYMLOOP_MAX,TTY_NAME_MAX和TZNAME_MAX。5.路径名可变值(可能不确定):FILESIZEBITS,LINK_MAX,MAX_CANON,MAX_INPUT,NAME_MAX,PATH_MAX,PIPE_BUFF   和SYMLINK_MAX。
3.3.XSI限制XSI还定义了处理实现限制的下面几个常量:1.不变最小值。《UNIX环境高级编程》札记-UNIX标准化及实现2.数值限制:LONG_BIT和WORD_BIT.3.运行时不变值(可能不确定):ATEXIT_MAX,IOV_MAX和PAGE_SIZE。3.4.sysconf函数,pathconf函数和fpathconf函数这3个函数都是获取运行时限制时取得的。定义如下:


pathconf函数和fpathconf函数的限制及name参数如下:《UNIX环境高级编程》札记-UNIX标准化及实现
这3个函数返回值代表的含义如下:1.如果name不在上面的2个表中,则函数返回-1.并将errno设置为EINVAL。2.有些name返回-1,这表示该值是不确定的,此时并不改变errno的值。可以使用下面的代码判断函数返回值:
long val;errno = 0;if((val = sysconf(name)) < 0){if(errno != 0){if(errno == EINVAL){printf("not supported.\n");}else{printf("sysconf error");}} else {printf("no limit\n");}}else{printf("%ld\n",val);}

4.选项在介绍POSIX标准是讲到了POSIX的选项(可选接口),如果我们程序与选项相关,需要确定系统是否支持该选项。XSI定义了3种处理方法:1.编译时预定义在<unistd.h>中。2.与文件或目录无关的选项用sysconf函数确定。(name参数前缀_POSIX必须替换为_SC)3.与文件或目录相关的选项用pathconf或fpathconf函数确定。(name参数前缀_POSIX必须替换为_PC)
如果符号常量未定义,则必须调用sysconf,pathconf或fpathconf以确定相应的选项是否受到支持。如果该平台定义了符号常量,则有3种可能:1.如果符号常量定义为-1,那么该平台不支持相应的选项。2.如果符号常量定义大于0,那么该平台支持相应的选项。3.如果符号常量定义为0,则必须调用sysconf,pathconf或fpathconf以确定相应的选项是否受到支持。

热点排行