分类: 系统运维
2012-03-27 17:43:41
ISO C:在1989年末,C语言的ANSI标准X3.159-1989就被通过了。这个标准同时被作为国际化标
准ISO/IEC 9899:1990。ANSI全称为American National Standards
Institute,ISO的美国成员。ISO的全称为Internetational Organization for
Standardization。IEC全称为International Electrotechnical Commission。
C标准现在由ISO/IEC国际标准工作组维护和改进。这个工作组为ISO/IEC JTC1/SC22/WG14,简称为WG14。ISO
C标准的目的是提供使C程序可以移植到各种不同的操作系统上,而不仅仅是UNIX。这个标准不仅定义了编程语言的语法和语义,同时还定义了一个标准库
(standard library)[Chapter 7 of ISO1999; Plauger 1992; Appendix B of
Kernighan and Ritchie 1988]。这个库非常重要,因为所有当代UNIX系统都提供了在C标准中定义的库函数。
在1999年,ISO C标准更新并作为ISO/IEC
9899:1999被采纳,大幅提升了对多进程应用程序的支持。除了在一些函数声明里加上了restrict关键字,这次更新没有影响到POSIX标准。
restrict关健字通过指出一个指针所指的对象仅被该指针引用,来告诉编译器这个指针引用是可以被优化的。
和多数标准一样,从标准出台到软件修改以符合标准之间会有一个延迟。随着开发商的编译系统的升级,他们为最新版本的ISO标准加了更多的支持。
根据标准定义的头文件,ISO C库可以分为24个领域:
POSIX.1标准除了这些头文件,也包含了其它一些头文件。稍后会列出这部分文件。
IEEE POSIX是由IEEE(Institute of Electrical can Electronic Engineers)发展的一组标准集。POSIX全称为Portable Operating System Interface。最开始它只特指IEEE标准1003.1-1988--操作系统接口--但后来扩展后从而包含了称号1003(1003 designation)的许多标准和标准草稿,包括shell和实用工具(1003.2)。
本文专门讨论1003.1操作系统接口标准,它的宗旨是促进应用程序在各种UNIX系统环境上的可移植性。这个标准规定符合POSIX标准的操作系统都必
须提供的服务。多数计算机厂商都采纳了这个标准。尽管这个标准是基于UNIX操作系统的,但它并不局限于UNIX和类UNIX系统。事实上,一些厂商在供
应专利操作系统的时候,在提供专利特性的同时,仍声明他们的操作系统是符合POSIX标准的。
因为1003.1标准规定了接口而非实现,所以系统调用和库函数并没有区分开来。所有在标准里定义的指令(routines)都没称为函数(functions)。
标准总是持续发展,1003.1标准也不例外。这个标准的1988版本,IEEE标准1003.1-1998,被修改并提交给了IOS。没有添加新的接口
或特性,但文字被修订了。修订好的文档作为IEEE标准1003.1-1990[IEEE 1990]发布,同时也作为国际化标准ISO/IEC
9945-1990。这个标准被普遍称为POSIX.1。
IEEE1003.1工作组仍在持续修改这个标准。在1993年,IEEE1003.1标准的一个修订版本发布,包含了1003.1-1990标准和 1003.1b-1993实时扩展(real-time extensions)标准。在1996年,这个标准再次更新为ISO/IEC 9945-1:1996。它包含了多线程编程接口,被称为pthread,表示POSIX线程。随着IEEE标准1003.1d-1999的发布,更多的 实时(real-time)接口在1999年被加入进来。一年后,IEEE标准1003.1j-2000发布了,包含更为丰富的real-time接口。 同时IEEE标准1003.1q-2000也发布了,加入了事件跟踪扩展(event-tracing extensions)。
1003.1的2001版本与之前的版本有些不同,它集成了1003.1的一些修改、1003.2标准以及部分的Single UNIX Specification(SUS)的版本2(之后还有更新的版本)。这种集合后的标准,便是IEEE标准1003.1-2001,包含了以下其它的标 准:
1、ISO/IEC
9945-1(IEEE标准1003.1-1996),包含IEEE标准1003.1-1990、IEEE标准1003.1b-1993(real-
time的扩展)、IEEE标准1003.1c-1995(pthreads)和IEEE标准1003.1i-1995(real-time技术勘误);
2、IEEE P1003.1a标准草案(系统接口修订);
3、IEEE标准1003.1d-1999(高级real-time扩展);
4、IEEE标准1003.1q-2000(跟踪-tracing);
5、IEEE标准1003.2d-1994(批处理扩展);
6、IEEE P1003.2标准草案(补充工具);
7、部分IEEE标准1003.1g-2000(协议无关接口--protocol-independent interfaces);
8、ISO/IEC 9945-2(IEEE标准1003.2-1993);
9、Single UNIX Specification版本2的基本规范,包括系统接口定义(Issue 5)、命令和工具(Issue 5)、系统接口和头文件(Issue5);
10、开放组技术标准(Open Group Technical Standard),网络服务(Issue 5.2);
11、ISO/IEC 9899:1999,编程语言-C;
POSIX标准规定的必须包含的头文件有:
POSIX标准中XSI扩展的头文件有:
POSIX标准定义的可选头文件有:
因为POSIX.1包含了ISO C标准,所以之前列出的ISO C中的头文件一样也包含在POSIX.1中。POSIX.1的接口分为必需的和可选两部分,可选接口根据功能能进一步分成50个小项,这些项包括一些以下 编程接口(每个接口都有一个选项代码--option code。选项代码是二个或三个字母组成的缩写,表示一个功能领域--functional area):
ADV、_POSIX_ADVISORY_INFO:咨询信息(real-time);
AIO、_POSIX_ASYNCHRONOUS_IO:异步输入输出(real-time);
BAR、_POSIX_BARRIERS:栅栏(real-time);
CPT、_POSIX_CPUTIME:进程CPU时间周期(real-time);
CS、_POSIX_CLOCK_SELECTION:时间选项(real-time);
CX、无:ISO C标准的扩展;
FSC、_POSIX_FSYNC:文件同步;
IP6、_POSIX_IPV6:IPv6接口;
MF、_POSIX_MAPPED_FILES:内存映射文件;
ML、_POSIX_MEMLOCK:进程内存锁(real-time);
MLR、_POSIX_MEMLOCK_RANGE:内存范围锁(real-time);
MON、_POSIX_MONOTONIC_CLOCK:单调锁(real-time);
MPR、_POSIX_MEMORY_PROTECTION:内存保护;
MSG、_POSIX_MESSAGE_PASSING:消息传递(real-time);
MX、无:IEC 60559浮点选项;
PIO、_POSIX_PRIORITIZED_IO:优先化输入输出;
PS、_POSIX_PRIORITIZED_SCHEDULING:进程调度(real-time);
RS、_POSIX_RAW_SOCKETS:裸套接字;
RTS、_POSIX_REALTIME_SIGNALS:real-time信号扩展;
SEM、_POSIX_SEMAPHORES:信号量(real-time);
SHM、_POSIX_SHARED_MEMORY_OBJECTS:共享内存对象(real-time);
SIO、_POSIX_SYNCHRONIZED_IO:同步输入输出(real-time);
SPI、_POSIX_SPIN_LOCKS:旋转锁(real-time);
SPN、_POSIX_SPAWN:量产(real-time);
SS、_POSIX_SPORADIC_SERVER:进程间断服务器(real-time);
TCT、_POSIX_THREAD_CPUTIME:线程CPU时间周期(real-time);
TEF、_POSIX_TRACE_EVENT_FILTER:追踪事件过滤器;
THR、_POSIX_THREADS:线程;
TMO、_POSIX_TIMEOUTS:timeout(real-time);
TMR、_POSIX_TIMERS:计时器(real-time);
TPI、_POSIX_THREAD_PRIO_INHERIT:线程优先级继承(real-time);
TPP、_POSIX_THREAD_PRIO_PROTECT:线程优先级保护(real-time);
TPS、_POSIX_THREAD_PRIORITY_SCHEDULING:线程执行调度(real-time);
TRC、_POSIX_TRACE:跟踪;
TRI、_POSIX_TRACE_INHERIT:跟踪继承;
TRL、_POSIX_TRACE_LOG:跟踪日志;
TSA、_POSIX_THREAD_ATTR_STACKADDR:线程栈地址属性;
TSF、_POSIX_THREAD_SAFE_FUNCTIONS:线程安全函数;
TSH、_POSIX_THREAD_PROCESS_SHARED:进程共享的线程同步;
TSP、_POSIX_THREAD_SPORADIC_SERVER:线程间断服务器(real-time);
TSS、_POSIX_THREAD_ATTR_STACKSIZE:线程栈地址大小;
TYM、_POSIX_TYPED_MEMORY_OBJECTS:分类内存对象(real-time);
XSI、_XOPEN_UNIX:X/Open扩展接口;
XSR、_XOPEN_STREAMS:XSI STREAMS。
POSIX.1并没有包含“超级用户”的概念。取而代之的是:有些操作需要“恰当的权限(appropriate
privileges)”,POSIX把这个术语的定义交给具体的实现。遵守"Department of
Defense”准则的UNIX系统有很多层安全等级。本文使用传统的术语以及谈论那些需要超级用户权限的操作。
经过近二十年的努力,标准已经变得成熟和稳定。POSIX.1标准现在被一个称为Austim Group的开放工作组维护。为了保证这些标准仍然有价值,它们需要不时地更新或重申。
单一UNIX规范(The Single UNIX Specification、SUS)是POSIX.1标准的
超集,定义了一些额外的接口来扩展基本POSIX.1规范提供的功能。这个完整的系统接口集称为X/Open系统接口(X/Open System
Interface,XSI)。_XOPEN_UNIX符号常量用来表示在XSI中而不在POSIX.1里定义的接口。
XSI同时来定义了遵守XSI标准的系统实现必须支持、而在POSIX.1描述为可选接口的那部分内容。这些内容包括文件同步、内存映射文件、内存保护、线程接口以及上面提到的标记为“强制SUS”的那些。只有遵守XSI标准的实现才能被称为UNIX系统。
The Open Group拥有UNIX的商标并且使用单一UNIX规范定义UNIX系统实现必须支持的接口。实现必须列出遵守的规范、通过测试来验证确实遵守了这些规范,然后获得许可来使用UNIX商标。
在XSI中定义的额外接口,有些是必须支持的,而另一些是可选的。这些接口根据功能可划分为几组:
加密(Encryption):由常量_XOPEN_CRYPT表示;
实时(real-time):由常量_XOPEN_REALTIME表示;
高级的实时(Advanced real-time);
实时线程(real-time threads):由常量_XOPEN_REALTIME_THREADS表示;
高级实时线程(Advanced real-time threads);
追踪(Tracing);
XSI STREAMS:由常量_XOPEN_STREAMS表示;
合法性:由常量_XOPEN_LEGACY表示;
单一UNIX规范(SUS)由The Open Group发布,该组织在1996年成立,由X/OPEN和Open Software
Foundation(OSF)合并而成,两者同属工会(industry
consortia)。X/Open常发布X/Open移植指导,该指导采纳专门的标准并填补缺失功能的空白。指导的目标是通过公布的标准,增加应用程序
的可移植的可能性。
SUS的第一个版本由X/OPEN在1994年颁布。它也被熟知为“Spec 1170”,因为它有大约1170个接口。它是在Common Open Software Enviroment(COSE)的倡导下成长起来的,COSE的宗旨是进一步地提高应用程序在所有UNIX操作系统实现上的可移植性。
COSE成员
有:SUN、IBM、HP、Novell/USL和OSF。它不仅仅认可标准,还研究那些可能被普通商业应用使用的接口。这1170个接口便是从这些程序
中选出的,而且还包含了X/Open Common Application Environment(CAE), Issue
4(根据它历史上的前身--X/Open Portability Guide,被熟知为“XPG4”)、系统V接口定义(System V
Interface Definition,SVID),Edition 3, Level 1接口,还有OSF应用环境规范(Application
Environment Specification,AES)Full Use接口。
SUS的第二个版本由The Open Group在1997年颁布。这个新版本加入了对线程、实时接口、64位处理、超大文件和增强双字节字符处理的支持。
SUS的第三个版本(简称SUSv3)由The Open
Group在2001年颁布,SUSv3的基本标准与IEEE标准1003.1-2001一样而且被分为4个部分:基本定义、系统接口、Shell和
Utilities、还有基本原理(rationale)。SUSv3还包含了X/Open Curses Issue 4, Version
2,但这个规范不是POSIX.1的一部分。
在2002年,ISO通过了这个版本作为国际标准ISO/IEC 9945:2002。The Open
Group在2003年再次更新了1003.1标准,包含了技术修正,并由ISO通过作为国际标准ISO/IEC
9945:2003。在2004年4月,The Open Group颁布了单一UNIX规范的第三个版本,2004版。它主要是包含了更多的技术修正。
FIPS全称为Federal Information
Processing
Standard,联邦信息处理标准。它由美国政府公布,他们用它来进行电脑系统采购。FIPS151-1(1989年4月)基于IEEE标准
1003.1-1998和ANSI C标准草案。接着FIPS 151-2(1993年5月)出台,基于IEEE标准1003.1-1990。FIPS
152-2要求一些POSIX.1中描述为可选的特性。所有这些可选部分作为必须支持的特性加入到POSIX.1-2001。
POSIX.1 FIPS导致任何想要卖遵守POSIX.1的计算机系统给美国政府的厂商都必须支持一些POSIX.1中的可选特性。POSIX.1 FIPS已经被撤回,所以本文不再讨论。