Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1798385
  • 博文数量: 438
  • 博客积分: 9799
  • 博客等级: 中将
  • 技术积分: 6092
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-25 17:25
文章分类

全部博文(438)

文章存档

2019年(1)

2013年(8)

2012年(429)

分类: 系统运维

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个领域:
:核查程序断言。


:复杂算法支持。


:字符类型。


:错误代码。


:浮点环境。


:浮点常量。


:整型格式转换。


:关系运算符的代替者的宏。比如"and"、"or"等。


:系统实现相关的一些常量。比如ARG_MAX、PATH_MAX等。


:地点的类目。比如__LC_ADDRESS、__LC_TELEPHONE等。


:数学常量。


:非局部的goto。


:信号。


:变量参数列表。


:布尔类型和值。


:标准定义。


:整数类型。


:标准I/O库。


:工具函数。


:字符串操作。


:范型数学宏。


:时间与日期。


:双字节和宽字符支持。


:宽字符分类与映射支持。


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标准规定的必须包含的头文件有:


:目录入口;


:文件控制;


:文件名匹配;


:路径名模式匹配;


:组文件;


:网络数据库操作;


:密码文件;


:正则表达式;


:tar文件;


:终端I/O;


:符号(symbolic)常量;


:文件时间;


:字扩展(word-expansion);


:Internet定义;


:套接字接口;


:Internet地址族;


:TCP(Transmission Control Protocol)定义;


:内存管理声明;


:select函数;


:套接字接口;


:文件状态;


:进程时间;


:原始系统数据类型;


:UNIX域套接字定义;


:系统名称;


:进程控制。


POSIX标准中XSI扩展的头文件有:


:cpio文件;


:动态链接;


:消息显示结构;


:文件树遍历;


:代码组(code set)转换工具;


:语言信息常量;


:模式匹配函数的定义;


:货币类型;


:数据库操作;


:消息类目;


:投票函数;


:查找表;


:字符串操作;


:系统错误日志;


:用户上下文;


:用户限制;


:用户帐号数据库;


:IPC;


:消息队列;


:资源操作;


:信号量;


:共享内存;


:文件系统信息;


:时间类型;


:补充日期与时间定义;


:矢量I/O操作。


POSIX标准定义的可选头文件有:

:异步I/O;

:消息队列;


:线程;


:执行调度;


:信号量;


:实时量产接口;


:XSI STREAMS接口;


:事件追踪。


因为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已经被撤回,所以本文不再讨论。


阅读(1371) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~