《unix环境高级编程--第章 UNIX标准化及实.doc》由会员分享,可在线阅读,更多相关《unix环境高级编程--第章 UNIX标准化及实.doc(16页珍藏版)》请在金锄头文库上搜索。
1、发信人:scircle(yuanyuan),信区:Security标题:unix环境高级编程-第2章UNIX标准化及实现发信站:BBS水木清华站(ThuMar2316:42:562000)第二章Unix标准化及实现21引言在使各种风格的Unix和C程序设计语言标准化方面已经做了很多工作。虽然Unix应用程序在不同的Unix版本之间进行移植是相当容易的,但是八十年代中Unix版本的剧增以及它们之间差别的扩大导致很多大工作(例如美国政府)要求对其进行标准化。本章将介绍正在进行的各种标准化工作,然后讨论这些标准对本书所说明的实际Unix实现的影响。所有标准化工作的一个重要部分是对每种实现必须定义的各
2、种限制的说明,所以我们将说明这些限制以及确定它们值的多种方法。22Unix标准化221ANSIC在1989年后期,C程序设计语言的ANSI标准X3159-1989得到批准ANSI1989。此标准已被采用为国际标准ISO/IEC9899:1990。ANSI是美国国家标准学会,它是由制造商和用户组成的非赢利性组织。在美国,它是全面性的无偿标准交换站,在国际标准化组织(ISO)中是代表美国的成员。ANSIC标准的意图是提供C程序的可移植性,使其能适合于大量不同的操作系统,而不只是Unix。此标准不仅定义C程序设计语言的语法和语义,也定义其标准库ANSI1989第四章;Plauger1992;Kern
3、ighan及Ritchie1988中的附录B。因为很多新的Unix系统(例如在本书中说明的几个Unix系统)都提供C标准中说明的库函数,所以此库对我们来讲是很重要的。按照该标准定义的各个头文件,可将该库分成15区。图21中列出了C标准定义的头文件,以及下面几节中说明的另外两个标准(POSIX1和XPG3)定义的头文件。在其中也列举了哪些头文件是SVR4和43+BSD所支持的。我们也将在本章中对这两种Unix实现进行说明。222IEEEPOSIXPOSIX是一个由IEEE(电气和电子工程师学会)制订的标准族。POSIX的意思是计算机环境的可移植操作系统界面(PortableOperatingSy
4、stemInterfaceforComputerEnvironment)。它原来指的只是IEEE标准10031-1988(操作系统界面),但是,IEEE现正在制订POSIX族中的其它有关标准。例如,10032将是针对shell和公用程序的标准,10037将是系统管理方面的标准。在1003工作组中有15个以上的子委员会。与本书特别有关的是10031操作系统界面标准,该标准定义了POSIX依从的操作系统必须提供的服务。虽然10031标准是以Unix操作系统为基础的,但是它又不限定于Unix和类似于Unix的系统。确实,有些供应专有操作系统的制造商也声称这些系统将依从POSIX(同时还保有它们的所有
5、专有功能)。由于10031标准说明了一个界面而不是一种实现,所以并不区分系统调用和库函数。所有在标准中的例程都被称为函数。标准是不断演变的,10031标准也不例外。该标准的1988版,IEEE10031-1988经修改后递交国际标准化组织(ISO),没有增加新的界面或功能,但修改了文本。最后的文档作为IEEEStd10031-1990正式出版IEEE1990,这也就是国际标准ISO/IEC9945-1:1990。该标准通常被称之为POSIX1,我们将在本书中使用此标准。IEEE10031工作组此后对其又作了更多更改,它们应在1993被批准。这些更改(现在称之为10031a)应由IEEE作为IE
6、EE标准10031-1990的附件出版,这些更改也对本书有所影响,主要是因为贝克莱风格的符号链接很可能将被加到标准中作为一种所要求的功能。这些更改也很可能成为ISO/IEC9945-1:1990的一个附录。在本书中,我们用注释的方法来说明POSIX1的10031a版本,指出哪些功能很可能会加到10031a中。POSIX1没有包括超级用户这样的概念。代之以规定某些操作要求适当的优先权,POSIX1将此术语的定义留由具体实现进行解释。某些符合国防部安全性指导原则要求的Unix系统具有很多不同的安全级。在本书中,我们仍使用传统的Unix术语,并指明要求超级用户特权的操作。图21由各种标准和实现定义的
7、头文件223X/OpenXPG3X/OPEN是一个国际计算机制造商组织。提出了一个七卷布可移植性指南,移为X/Open可移植性指南,第三版Open1989,我们将称之为XPG3。XPG3的第二卷(XSI系统界面和头文件)对类似Unix的系统定义了一个界面,该界面定义是在IEEEStd10031-1988界面的基础上制订的。XPG3包含了一些POSIX1没有的功能。例如,一个POSIX1没有但XPG3却有的功能是X/Open的消息设施。该设施可由应用程序使用以在不同的语言中显示文件消息。XPG3界面使用了ANSIC草案而不是最后的正式标准,所以在XPG3界面规格说明中包含的某些功能是不再使用的。
8、这些问题很可能会在将来的XPG规格说明的新版本中解决。(有关XPG4的工作正在进行,很可能会在1993年完成)。224FIPSFIPS的含意是联邦信息处理标准(FederalInformationProcessingStandard),这些标准是由美国政府出版的,并由美国政府用于计算机系统的操购。FIPS151-1(19894)是基于IEEEStd10031-1988及ANSIC标准草案的。FIPS151-要求某些POSIX1规定为可选的功能。这种FIPS有时称为POSIX1FIPS。其255节列出了FIPS所要求的POSIX1的可选项。POSIX1FIPS的影响是:它要求任一希望向美国政府销
9、售POSIX1依从的计算机系统的厂商应支持POSIX1的某些可选功能。我们将不把POSIX1FIPS视作为另一个标准,因为实际上它只是一个更加严格的POSIX1标准。23Unix实现上面一节说明了三个由各自独立的组织所制定的标准:ANSIC、IEEEPOSIX以及X/OpenXPG3。但是,标准只是界面的规格说明。这些标准是如何与现实世界相关连的呢?这些标准由制造商采用,然后转变成具体实施。本书中我们感兴趣的是这些标准和它们的具体实施两者。在Leffler等著作的11节中给出了Unix族树的详细历史和关系图。Unix的各种版本和变体都起源于在PDP-11系统上运行的Unix分时系统第6版(19
10、76)和第7版(1979)(通常称为Version6和Version7)。这两个版本是在贝尔实验室以外首先得到广泛应用的Unix系统。从这棵树上发展出三个分支:(a)AT&T分支,从此导出了系统和系统(被称之为Unix的商用版本),(b)加州大学贝克莱分校分支,从此导出4XBSD实现,(c)由AT&T贝尔实验室的计算科学研究中心不断开发的Unix研究版本,从此导出第8、第9和第10版。231系统第4版系统第4版(SVR4)是AT&TUnix系统实验室的产品,它汇集了下列系统的功能:AT&TUnix系统第32版(SVR32),SunMicrosystem的Sunos系统,加州大学贝克莱分校的43
11、BSD以及Microsoft的Xenix系统。(Xenix是在Verson7基础上开发的,后来又采用了很多系统的功能。)其源代码于1989年后期分布,在1990年则开始向最终用户提供。SVR4符合于POSIX10031标准和X/OPENXPG3标准。AT&T也制版了系统界面定义(SVID)AT&T1989。SVID第三版说明了Unix系统要达到SVR4质量要求所应提供的功能。如同POSIX1一样,SVID说明了一个界面,而不是一种实现。对于一个具体实现的4应查看其参考手册,以了解其不同之处。AT&T1990e。SV包含了BSD的兼容库AT&T1990c,它提供了功能与43BSD对应部分相同的函
12、数和命令。但是其中某些函数与POSIX的对应部分有所不同,本书中的所有SVR4实例都没有此兼容库。只有在你有一些早期的应用程序,又不想改变它们时才使用此兼容库,新的应用程序不应使用它。23243+BSDBSD是由加州大学贝克莱分校的计算机系统研究组研究开发和分发的。42BSD在1983年问世,43BSD则在1986年。这两个版本都在VAX小型机上运行。它们的下一个版本43BSDTahoe在1988年发布,在一台称为Tahoe的小型机上运行Leffler等的著作说明了43BSDTaboe版。其后又有1990年的43BSDReno版,它支持很多POSIX1的功能。下一个主要版本44BSD应在199
13、2年发布。原来的BSD系统包含了AT&T专有的源代码,它们需要AT&T许可证。为了获得BSD系统的源代码,首先需要持有AT&T源代码正被代换成非AT&T源代码,很多加到BSD系统上的新功能也来自非AT&T方面。在1989年,贝克莱将43BSDTaboe中很多非AT&T源代码包装成BSD网络软件,10版,并使其成为公众可用的软件。其后则有BSD网络软件的20版,它是从43BSDReno版导出的,其目的是使大部分(如果不是全部的话)44BSD系统不再受AT&T许可证的限制,于是其全部源代码都可为公众使用。正如我们在前言中所说明的,在全书中,我们用术语43+BSD来指本书所说明的BSD系统,该系统位于BSD网络软件20版和将出现的44BSD之间。在贝克莱所进行的Unix开发工作是从PDP-11开始的,然后转移到VAX小型机上,然后又转移到工作站上。在九十年代早期,贝克莱得到支持在广泛得到应用的80386个人计算机上开发BSD版本,结果产生了386BSD。这一工作是由BillJolitg完成的。其相关文档是发表在1991年的DrDobbsJournal上的系列文章(每月一篇)。其中很多代码出现在BSD网络软件,20版中。24标准和实现的关系我们已提及的标准定义了任一实际系统的子集。虽然IEEEPOSIX正致力于在