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個函數之一獲得。
#include <unistd.h>
long sysconf(int name);
long pathconf(const char *pathname, int name);
long fpathconf(int fd, int name);
// 所有函數返回值:若成功,返回相應值;若出錯,返回-1
基本系統數據類型
頭文件<sys/types.h>中定義了某些與實現有關的數據類型,它們被稱為基本系統數據類型。還有很多這種數據類型定義在其他頭文件中。在頭文件中,這些數據類型都是用C的typedef來定義的。它們絕大多數都以_t結尾。

浙公網安備 33010602011771號