APUE-Chap.2-UNIX标准及实现
本章回顾人们对UNIX标准化做出的努力与影响,并说明标准化工作中对每种实现必须定义的各种限制。
UNIX标准化
ISO C
ANSI即American National Standards Institute,美国国家标准学会,它是International Organization for Standardization即国际标准化组织ISO中代表美国的成员。IEC是国际电子技术委员会International Electrotechnical Commission的缩写。
ISO C标准:由ISO/IEC中的专门工作组维护和开发,该工作组简称WG14。此标准是为了C的可移植性。它定义了C的语法和语义和标准库。如今所有UNIX系统都提供C标准中定义的库函数,所以此标准库非常重要。
restrict关键字:告诉编译器那些指针引用可以优化,添加自ISO/IEC 9899:1999。
IEEE POSIX
POSIX(Portable Operating System Interface,可以指操作系统接口)标准族最初由IEEE(Institute of Electrical and Electronics Engineers,电气和电子工程师学会)制订。现在由Austin Group开放工作组维护。
POSIX 1003.1操作系统接口标准,它定义了符合此标准的操作系统必须提供的各种服务。
同时所有标准中的例程都被称为函数
而不会区别系统调用和库函数。
POSIX.1:指的是IEEE正式出版的1003.1标准。后面又发了很多1003.1的更新。
Single UNIX Specification
即SUS,单一UNIX规范,是POSIX.1的超集。
UNIX系统实现
SVR4
4.4BSD
FreeBSD
基于4.4BSD-Lite,免费的。
Linux
你懂的
Mac OS X
基于很多东西。算UNIX系统
Solaris
Sun开发的,也算UNIX系统
其他一些UNIX系统
标准和实现的关系
我觉得你应该懂
限制
一些UNIX系统实现中的硬编码。
- 编译时限制
- 运行时限制
ISO C限制
此标准定义的所有编译时限制都列在limits.h
中。POSIX限制
XSI限制
函数sysconf、pathconf、fpathconf
用于获取一个特定系统实际支持的运行时限制值。
不同的返回值意味着多种结果。不确定的运行时限制
比如路径名,它们的值是不确定的,那么在limits.h
中可能也未定义。
最大打开文件数。选项
关于如何使用可移植的方法来判断实现是否支持一个给定的选项。功能测试宏
编译时可以定义常量_POSIX_C_SOURCE
以此所有POSIX.1头文件将都使用此常量来排除任何实现专有的定义。它与_XOPEN_SOURCE
被称为功能测试宏。源文件第一行:1
cc -D_POSIX_C_SOURCE=200809L file.c
1
#define_POSIX_C_SOURCE 200809L
基本系统数据类型
sys/types.h
中定义了某些与实现有关的数据类型。使得不再需要考虑因系统不同而变化的程序实现细节。标准之间的冲突
ISO C和POSIX.1之间如果出现冲突,则后者服从前者。小结
本章主要讨论三个主要标准:ISO C、POSIX和Single UNIX Specification。
他们有4个我们主要关注的实现:FreeBSD、Linux、Mac OS X和Solaris。