2.2UNIX标准化
ISO C
1989年,C语言首个标准得到批准,其为C89。次年,一个带有小改动的版本标准被批准其为C90。因此,C89和C90通常指同一种语言。在2000年三月,ANSI采纳了ISO/IEC 9899:1999标准。这个标准通常指C99。在2011年12月,ANSI采纳了ISO/IEC 9899:2011标准。这个标准通常即C11,它是C程序语言的现行标准。
按照ISO C标准定义的头文件将C语言公用函数库划分成了24个部分。POSIX.1标准包括这些头文件以及一些额外的头文件。
IEEE POSIX
POSIX是由IEEE制订的一系列标准,其指的是可移植操作系统接口,它说明的是接口而不是实现。
Single UNIX Specification
Single UNIX Specification简称SUS,它是POSIX.1标准的一个超集。
FIPS
联邦信息处理标准:已经撤回
2.3UNIX系统实现
ISO C、IEEE POSIX、Single UNIX Specification是三个不同的组织,第一个组织负责对C语言进行标准化,后两个组织负责对UNIX系统接口进行标准化。这三个组织制定了概念上的规范,但实现是由厂商进行的。几个知名实现发行版如下:
- SVR4:AT&T实现
- BSD:加州大学伯克利分校实现
- FreeBSD:FreeBSD志愿者
- Linux:Minix改写而来,志愿者维护
- Mac OS X:Apple公司
- Solaris:SUN公司
UNIX系统中既有编译器的限制,又有UNIX实现(与编译程序无关)有关的限制。这两种限制有交集部分,也有差集部分,比如int类型的字节长度,和编译器有关,和UNIX系统无关,但通常编译器会参考操作系统的实现来决定。而程序能打开文件描述符的数量和UNIX实现有关,而和编译器无关。对于操作系统的种种限制,UNIX系统提供了3个库函数来查看。其头文件及函数原型如下:
#include <unistd.h>
long int sysconf (int name);
long int pathconf (const char* path, int name);
long int fpathconf (int fd, int name);
2.4标准和实现的关系
这些操作系统在不同程度上符合POSIX标准,但有的有些差别。
2.5限制
ISO C限制 POSIX限制 XSI限制
2.6选项
2.7功能测试宏
2.8基本数据类型
2.9标准之间额冲突
习题: