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.mzph.cn/news/929800.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

存一下刚开始学编程的东西

phpstudy的MySQL启动不了的解决办法关了自己的MySQL把自己的MySQL中的所有文件复制把phpstudy的MySQL文件全删了再粘贴搞定为什么phpstudy创建的网站不能打开解决办法www.abc.com端口弄80去C:\Windows\system32\driver…

域名到期查询怎样做网站的优化工作

postmaster内容 使用cat -n 命令可以查看postmaster.pid文件内容&#xff1a; ) 根据每一行进行解释&#xff0c;并给出对应的源代码说明 13795: 代表Postgres主进程的PID/usr/local/pgsql/data: 代表数据目录 1529235109&#xff1a; 代表postmaster文件的创建时间。 54…

深入解析:预览pdf(url格式和blob格式)

深入解析:预览pdf(url格式和blob格式)2025-10-06 22:57 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block…

线性偏微分方程和非线性偏微分方程的区别

线性偏微分方程和非线性偏微分方程的区别区别的核心在于方程中未知函数及其各阶偏导数的“出现形式”。 参考:https://chat.deepseek.com/a/chat/s/e864c044-a73a-4271-8b7c-bb237c9f81d5

制作自己的网站需要什么材料如何做百度网站推广

在这之前&#xff0c;一直是在使用Scroll View进行滑动内容设置&#xff0c;但设置的都是不明不白的&#xff0c;而且有的时候设置好了之后也不知道是为什么&#xff0c;总感觉哪里不对劲&#xff0c;而且好也不知道为什么好&#xff0c;可能是长时间在做管理上的内容&#xff…

成都设计公司视频制作亚马逊关键词优化软件

【C】使用 list 与 string 实现基础字符串操作 文章目录 一、字符串的基础操作1.1 - startsWith1.2 - endsWith1.3 - trim1.4 - indexOf1.5 - replaceAll 二、list 基础操作2.1 - 遍历2.1.1 - 使用迭代器访问2.1.2 - 使用基于范围的 for 循环遍历2.1.3 - 使用标准算法库遍历 2.…

1-50 题解

1-10 1. A + B Problem #include <iostream> using namespace std;int main(){int a,b; cin>>a>>b;cout<<a+b<<endl;return 0; }2. Two Rectangles #include <iostream> using n…

基于AXI模块的视频流传输(ps控制篇)

在生成VDMA,GPIO,IIC后,会生成对于的bsp板级包。这里我不打算进行深入学习(不会尝试自己去写这份ps代码),要求能较为深入理解ps工作的原理即可,依旧不去细看HDMI模块相关。首先导入了几个库,然后定义了几个宏,…

lora的各种变体

lora的各种变体:lora+:对A(靠近输入端)和B(靠近输出端)设置不同的学习率以加速收敛,对B的学习率通常是A的4到16倍,这是因为近输出层的梯度更加稳定,近输入层的梯度相对不稳定,如果设置的学习率过大,容易梯度…

GO+RabbitMQ+Gin+Gorm+docker 部署 demo - 实践

GO+RabbitMQ+Gin+Gorm+docker 部署 demo - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &…

k8s pod启动失败困难排查

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Python测试

今日内容pycharm安装 git 版本控制 -- 协同开发 码云 -- 远程仓库 思维导图 个人博客 -- 技术人员昨日回顾typora 安装 使用标题 有序序号 无序序号 加粗 斜体 删除线 插入图片 插入表格 代码块、python的简介python2和…

免费文字转语音 AI 工具 All In One

免费文字转语音 AI 工具 All In One free TTS to Audio AI Tools TTSMaker 免费文字转语音免费文字转语音 AI 工具 All In Onefree TTS to Audio AI ToolsTTSMaker 免费文字转语音 每周限制 20000 个字符(部分声音可支…

Kubernetes Deployment:部署与管理应用指南

1. ReplicaSet(RS) 2. Deployment 3. Deployment资源配置 总结‍在上一章节中,介绍了pod,以及介绍了如何使用命令行来创建一个pod。那么问题来了,一般来说,我们部署微服务不可能只部署一个噻,肯定是部署多个,但…

wordpres做影视网站公关策划书模板范文

宏定义 不带参数 宏定义又称为宏代换、宏替换&#xff0c;简称“宏”。 格式&#xff1a; #define 标识符 字符串其中的标识符就是所谓的符号常量&#xff0c;也称为“宏名”。 预处理&#xff08;预编译&#xff09;工作也叫做宏展开&#xff1a;将宏名替换为字符串。 掌…

实用指南:Android高级开发第三篇 - JNI异常处理与线程安全编程

实用指南:Android高级开发第三篇 - JNI异常处理与线程安全编程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Co…

商城网站设计公司系统优化包括哪些

作者推荐 视频算法专题 本文涉及知识点 哈希映射 哈希集合 LeetCode 381. O(1) 时间插入、删除和获取随机元素 - 允许重复 RandomizedCollection 是一种包含数字集合(可能是重复的)的数据结构。它应该支持插入和删除特定元素&#xff0c;以及删除随机元素。 实现 Randomiz…

判断网站开发语言wordpress 访问速度

来源&#xff1a;德先生作者&#xff1a;朱圆恒&#xff0c;唐振韬&#xff0c;李伟凡&#xff0c;赵冬斌北京时间2019年1月25日2时&#xff0c;DeepMind在伦敦向世界展示了他们的最新成果——星际争霸2人工智能AlphaStar[1] 。图1. DeepMind AlphaStar挑战星际人类职业玩家直播…

分布式CAP理论 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

【闲话】2025.9.24 记梦

破碎,离奇。话说 \(9.25\) 吃了 \(hz\) 校庆期间 \(hs\) 食堂免费饭菜的人第二天都被抓去做黑工,我和 @wkh2008 因为当时润去不知道干什么了所以没有被抓走,第二天回到班里发现毫无人,然后被学校里巡游的中介带走。…