APUE学习笔记之UNIX标准及实现(二)
本文记录《UNIX环境高级编程》第3版中第2章UNIX标准与实现的一些知识点。
UNIX标准化
维度 | ISO C | POSIX | SUS(Single UNIX Specification) |
---|---|---|---|
定义主体 | 国际标准化组织(ISO) | 电气电子工程师协会(IEEE) | The Open Group(继承自 X/Open) |
核心目标 | 统一 C 语言本身的语法、标准库,确保跨编译器兼容 | 统一类 Unix 系统的接口,确保应用跨系统兼容 | 定义“合规 Unix 系统”的完整标准,整合并扩展 POSIX |
覆盖范围 | C 语言语法(如关键字、类型)、标准库(如
stdio.h 、stdlib.h ) |
系统调用(如 open 、fork )、命令行工具(如
ls )、Shell 接口等 |
包含 POSIX 全部内容,新增更多接口(如 XSI 扩展)、命令和库函数 |
强制性 | 编译器需完全实现以声称“符合 ISO C 标准” | 系统可部分实现(标记为“可选”),但需声明支持范围 | 若声称“符合 SUS”,必须实现所有规定内容(包括 POSIX 可选部分中的 XSI 必选接口) |
与 Unix 关联 | 不绑定特定操作系统,适用于所有支持 C 的平台 | 专为类 Unix 系统设计(如 Linux、macOS) | 直接定义“Unix 系统”的标准,是“Unix 商标”认证的依据 |
典型内容 | printf 、malloc 、strcmp
等语言级函数 |
read 、write 、exec
等系统调用;pthread 线程库 |
包含 POSIX 内容 + XSI 扩展(如 msgctl
消息队列、nl_langinfo 本地化函数) |
- ISO C 是“语言标准”,POSIX 是“类 Unix 系统接口标准”,SUS 是“Unix
系统的完整标准”(基于 POSIX 并扩展,更严格)。
- 一个符合 SUS 的系统,必然符合 POSIX 和 ISO C;但符合 POSIX 或 ISO C 的系统,未必符合 SUS。
限制
UNIX 系统实现定义了很多幻数和常量,其中有很多已被硬编码到程序中,或用特定的技术确定。
以下两种类型的限制是必需的。
(1)编译时限制(例如,短整型的最大值是什么?)
(2)运行时限制(例如,文件名有多少个字符?)
编译时限制可在头文件中定义。程序在编译时可以包含这些头文件。但是,运行时限制则要求进程调用一个函数获得限制值。
为了解决这类问题,提供了以下3种限制。
(1)编译时限制(头文件)。
(2)与文件或目录无关的运行时限制(sysconf
函数)。
(3)与文件或目录有关的运行时限制(pathconf
和fpathconf
函数)。
函数sysconf、pathconf和fpathconf
运行时限制可调用下面3个函数之一获得。
1 |
|
基本系统数据类型
头文件<sys/types.h>
中定义了某些与实现有关的数据类型,它们被称为基本系统数据类型。还有很多这种数据类型定义在其他头文件中。在头文件中,这些数据类型都是用C的typedef
来定义的。它们绝大多数都以_t
结尾。