本章回顾人们对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。
1676471478997-ba38269e-4fb0-43a1-85bb-98b9d0853424.png

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的超集。
1676472242321-45b1ed31-e8d9-40b7-be86-c2b93ec5075a.png

UNIX系统实现

SVR4

1676472416366-6f74600f-3557-46f9-8048-e7561023fd88.png

4.4BSD

FreeBSD

基于4.4BSD-Lite,免费的。

Linux

你懂的

Mac OS X

基于很多东西。算UNIX系统

Solaris

Sun开发的,也算UNIX系统

其他一些UNIX系统

标准和实现的关系

我觉得你应该懂

限制

一些UNIX系统实现中的硬编码。

  1. 编译时限制
  2. 运行时限制

    ISO C限制

    此标准定义的所有编译时限制都列在limits.h中。

    POSIX限制

    XSI限制

    函数sysconf、pathconf、fpathconf

    用于获取一个特定系统实际支持的运行时限制值。
    1676474776837-e73164f1-99d6-4a8b-b98a-454376ab30bb.png
    不同的返回值意味着多种结果。
    1676474904085-025af5f7-f619-47ee-bbf4-d7046405bb59.png
    1676474922870-75ba268b-57a3-4a44-9e72-0798282e1dd0.png

    不确定的运行时限制

    比如路径名,它们的值是不确定的,那么在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。
⬆︎TOP