当前位置: 首页 > news >正文

APUE学习笔记之UNIX标准及实现(二) - Invinc

本文记录《UNIX环境高级编程》第3版中第2章UNIX标准与实现的一些知识点。


UNIX标准化

ISO C

1989年下半年,C程序设计语言的ANSI标准X3.159-1989得到批准。此标准被也采纳为国际标准ISO/IEC 9899:1990。

1999年,ISO C标准被更新,并被批准为ISO/IEC 9899:1999,它显著改善了对进行数值处理的应用软件的支持。

C标准已经在2011年更新。

按照该标准定义的各个头文件可将ISO C库分成24个区。POSIX.1标准包括这些头文件以及另外一些头文件。

img

图2-1 ISO C标准定义的头文件

IEEE POSIX

POSIX是一个最初由IEEE制订的标准族。POSIX指的是可移植操作系统接口(Portable Operating System Interface)。

图2-2、图2-3以及图2-4总结了POSIX.1指定的必需的和可选的头文件。因为POSIX.1包含了ISO C标准库函数,所以它还需要图2-1中列出的各个头文件。

img

图2-2 POSIX标准定义的必需的头文件

img

图2-3 POSIX标准定义的XSI可选头文件

img

图2-4 POSIX标准定义的可选头文件

Single UNIX Specification

Single UNIX Specification(SUS,单一UNIX规范)是POSIX.1标准的一个超集,它定义了一些附加接口扩展了POSIX.1规范提供的功能。POSIX.1相当于Single UNIX Specification中的基本规范部分。

1997年,Open Group发布了Single UNIX Specification第2版。新版本增加了对线程、实时接口、64位处理、大文件以及增强的多字节字符处理等功能的支持。

Single UNIX Specification第3版(SUSv3)由Open Group在2001年发布。

2010年Single UNIX Specification第4版发布,把这个规范称为SUSv4。


UNIX系统实现

UNIX的各种版本和变体都起源于在PDP-11系统上运行的UNIX分时系统第6版(1976年)和第7版(1979年)(通常称为V6和V7)。这两个版本是在贝尔实验室以外首先得到广泛应用的UNIX系统。从这棵树上演进出以下3个分支。

(1)AT&T分支,从此引出了系统III和系统V(被称为UNIX的商用版本)。

(2)加州大学伯克利分校分支,从此引出4.xBSD实现。

(3)由AT&T贝尔实验室的计算科学研究中心不断开发的UNIX研究版本,从此引出UNIX分时系统第8版、第9版,终止于1990年的第10版。

SVR4

SVR4(UNIX System V Release 4)是AT&T的UNIX系统实验室的产品。

4.4BSD

BSD(Berkeley Software Distribution)是由加州大学伯克利分校的计算机系统研究组(CSRG)研究开发和分发的。

4.4BSD-Lite是CSRG计划开发的最后一个发行版。4.4BSD-Lite第2发行版是CSRG的最后一个BSD版本。

FreeBSD

FreeBSD基于4.4BSD-Lite 操作系统。在加州大学伯克利分校的 CSRG决定终止其在UNIX操作系统的BSD版本的研发工作,而且386BSD项目被忽视很长时间之后,为了继续坚持BSD系列,形成了FreeBSD项目。

由FreeBSD项目产生的所有软件,包括其二进制代码和源代码,都是免费使用的。

Linux

Linux是一种提供类似于UNIX的丰富编程环境的操作系统,在GNU公用许可证的指导下, Linux是免费使用的。

Linux是由Linus Torvalds在1991年为替代MINIX而研发的。

Mac OS X

与其以前的版本相比,Mac OS X使用了完全不同的技术。其核心操作系统称为“Darwin”,它基于Mach内核、FreeBSD操作系统以及具有面向对象框架的驱动和其他内核扩展的结合。Mac OS X 10.5的Intel部分已经被验证为是一个UNIX系统。

Solaris

Solaris是由Sun Microsystems(现为Oracle)开发的UNIX系统版本。它基于SVR4,在超过15 年的时间里,Sun Microsystems 的工程师对其功能不断增强。它是唯一在商业上取得成功的SVR4后裔,并被正式验证为UNIX系统。

其他UNIX系统

已经通过验证的其他UNIX版本包括:

  • AIX,IBM版的UNIX系统;

  • HP-UX,HP版的UNIX系统;

  • IRIX,Silicon Graphics版的UNIX系统;

  • UnixWare,SVR4派生的UNIX系统,现由SCO销售。


限制

UNIX 系统实现定义了很多幻数和常量,其中有很多已被硬编码到程序中,或用特定的技术确定。

以下两种类型的限制是必需的。

(1)编译时限制(例如,短整型的最大值是什么?)

(2)运行时限制(例如,文件名有多少个字符?)

编译时限制可在头文件中定义。程序在编译时可以包含这些头文件。但是,运行时限制则要求进程调用一个函数获得限制值。

为了解决这类问题,提供了以下3种限制。

(1)编译时限制(头文件)。

(2)与文件或目录无关的运行时限制(sysconf函数)。

(3)与文件或目录有关的运行时限制(pathconf和fpathconf函数)。

使事情变得更加复杂的是,如果一个特定的运行时限制在一个给定的系统上并不改变,则可将其静态地定义在一个头文件中,但是,如果没有将其定义在头文件中,应用程序就必须调用 3个conf函数中的一个,以确定其运行时的值。

ISO C限制

ISO C定义的所有编译时限制都列在头文件<limits.h>中。这些限制常量在一个给定系统中并不会改变。表中第3列列出了ISO C标准可接受的最小值。第4列列出了32位整型Linux系统的值。注意,没有列出无符号数据类型的最小值,这些值应该都为0。在64位系统中,其long整型的最大值与表中long long整型的最大值相匹配。

`<limits.h>`中定义的整型值大小

函数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结尾。

 一些常用的基本系统数据类型
http://www.hskmm.com/?act=detail&tid=25726

相关文章:

  • 存一下刚开始学编程的东西
  • 线性偏微分方程和非线性偏微分方程的区别
  • 基于AXI模块的视频流传输(ps控制篇)
  • lora的各种变体
  • Kubernetes Deployment:部署与管理应用指南
  • GO+RabbitMQ+Gin+Gorm+docker 部署 demo - 实践
  • Python测试
  • 免费文字转语音 AI 工具 All In One
  • 【闲话】2025.9.24 记梦
  • 酷派Cool20/20S/30/40手机安装Play商店-谷歌三件套-GMS方式
  • Cloudflare洛杉矶数据中心维护通知:技术架构与影响解析
  • 实验
  • StarTree支持Apache Iceberg扩展湖仓用例
  • 偏微分方程的解
  • selenium基础 - 教程
  • 2025.10.6模拟赛
  • 费马小定理的证明
  • 威尔逊定理的证明
  • 实用指南:HTML实现端午节主题网站:龙舟争渡,凭吊祭江诵君赋
  • 深入解析:rknn优化教程(一)
  • WannaCry勒索病毒数字取证与安全监控实战指南
  • 吴恩达深度学习课程一:神经网络和深度学习 第二周:神经网络基础(二)
  • 08. 自定义组件
  • 20251006 模拟测 总结
  • 数据源切换之道
  • 完整教程:tryhackme——Abusing Windows Internals(进程注入)
  • 向量存储vs知识图谱:LLM记忆系统技术选型
  • QBXT2025S刷题 Day5
  • FFT 学习笔记
  • Ai元人文系列:领域协同深耕:构建人机价值共生的文明实践框架