《UNIX网络编程 卷2:进程间通信(第2版)》——1.7 Unix标准

简介: Posix是“可移植操作系统接口”(Portable Operating System Interface)的首字母缩写。它并不是一个单一标准,而是一个由电气与电子工程师学会即IEEE开发的一系列标准。

本节书摘来自异步社区《UNIX网络编程 卷2:进程间通信(第2版)》一书中的第1章,第1.7节,作者:【美】W. Richard Stevens著,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.7 Unix标准

有关Unix标准化的大多数活动是由Posix和Open Group做的。

1.7.1 osix
Posix是“可移植操作系统接口”(Portable Operating System Interface)的首字母缩写。它并不是一个单一标准,而是一个由电气与电子工程师学会即IEEE开发的一系列标准。Posix标准还是由ISO(国际标准化组织)和IEC(国际电工委员会)采纳的国际标准,这两个组织合称为ISO/IEC。Posix标准经历了以下若干代。

IEEE Std 1003.1-1988(共317页)是第一个Posix标准。它说明进入类Unix内核的C语言接口,涉及下列领域:进程原语(fork、exec、信号、定时器)、进程环境(用户ID、进程组)、文件与目录(所有I/O函数)、终端I/O、系统数据库(口令文件和用户组文件)、tar与cpio归档格式。

第一个Posix标准是出现于1986年称为“IEEEIX”的试用版本。Posix这个名字是由Richard Stallman建议使用的。
IEEE Std 1003.1-1990(共356页)是下一个Posix标准,它也是国际标准ISO/IEC 9945-1: 1990。从1988年版本到1990年版本只做了少量的修改。新添的副标题为“Part 1: System Application Program Interface (API) [C Language]”,指示本标准为C语言API。

IEEE Std 1003.2-1992出版成两卷本,共约1300页,其副标题为“Part2: Shell and Utilities”。这一部分定义了shell(基于System V的Bourne shell)和大约100个实用程序(即通常从shell启动执行的程序,包括awk、basename、vi和yacc等)。本书称这个标准为Posix.2。
IEEE Std 1003.1b-1993(共590页)先前称为IEEE P1003.4。这是对1003.1-1990标准的更新,添加了由P1003.4工作组开发的实时扩展:文件同步、异步I/O、信号量、内存管理(mmap和共享内存区)、执行调度、时钟与定时器、消息队列。
IEEE Std 1003.1,1996年版[IEEE 1996]包括1003.1-1990(基本API)、1003.lb-1993(实时扩展)、-1995 (Pthreads)和1003.1i-1995(对1003.1b的技术性修正)。这个标准也称为ISO/IEC 9945-1: 1996。其中增加了三章线程内容以及有关线程同步(互斥锁和条件变量)、线程调度和同步调度的额外各节。本书称这个标准为Posix.1。
743页中有四分之一强的篇幅是标题为“Rationale and Notes”(原理与注解)的附录。这些原理含有历史性信息以及某些特性必须加入或删除的理由,它们通常跟正式标准一样有教益。
遗憾的是IEEE标准在因特网上不是免费可得的。其订购信息在[IEEE 1996]的参考文献说明中给出。
注意信号量在实时标准中定义,它与在Pthreads标准中定义的互斥锁和条件变量相分离,这足以解释它们的API中存在的某些差异。
最后注意读写锁(尚)不属于任何Posix标准。我们将在笫8章中详细讨论。
将来某个时候印制的新版本的IEEE Std 1003.1应包括P1003.lg标准,它是我们在UNPvl中讲述的网络编程API(套接字和XTI)。

1996年版的Posix.1标准的前言中声称ISO/IEC 9945由下面三个部分构成。

Part 1: System application program interface (API) [C Language](第一部分:系统应用程序接口(API)[C语言])。
Part 2: Shell and utilities(第二部分:Shell和实用程序)。
Part 3: System administration(第三部分:系统管理)(正在开发中)。
第一部分和第二部分就是我们所称的Posix.1和Posix.2。

Posix标准化工作仍将继续,任何论述到它的书籍都在跟踪这项工作。
1.7.2 Open Group
Open Group是由X/Open公司(1984年成立)和开放软件基金会(OSF,1988年成立)于1996年合并而成的组织。它是由厂家、业界最终用户、政府部门和学术机构组成的国际组织。它们的标准经历了以下若干代。

X/Open公司于1989年出版了“X/Open Portability Guide”(《X/Open移植性指南》)第3期(XPG3)。
第4期于1992年出版,这一期的第2版于1994年出版。这个最终版本也称为“Spec ,其中魔数1170是系统接口数(926个)、头文件数(70个)和命令数(174个)的总和。这组规范的最终名字是“X/Open Single Unix Specification”(X/Open单一Unix规范),也称为“Unix 。
1997年3月单一Unix规范的第2版发表。符合这个规范的产品可称为“Unix ,这也是本书提到这个规范所用的名称。Unix 98所需的接口数从1170个增加到1434个,然而,适用于工作站的接口数却猛增到3030个,因为它包含CDE(公共桌面环境,Common Desktop Environment),而CDE又反过来要求有X Windows系统和Motif用户接口。
单一Unix规范的许多文档可在因特网上从这个站点免费取得。
1.7.3 Unix版本和移植性
当今大多数Unix系统符合Posix.1和Posix.2的某个版本。我们使用限定词“某个”是因为Posix每次更新(例如1993年增加实时扩展,1996年增加Pthreads内容),厂家都得花一两年(甚至更长的时间)去实现并加入最近的更新内容。

从历史上看,多数Unix系统或者源自Berkeley,或者源自System V,不过这些差别在慢慢消失,因为大多数厂家已开始采用Posix标准。仍然存在的主要差别在于系统管理,这是一个目前还没有任何Posix标准可循的领域。

运行本书中大多数例子的平台是Solaris 2.6和Digital Unix 4.0B。其原因在于写到此处时(1997年末到1998年初),只有这两种Unix系统支持System V IPC、Posix IPC及Posix线程。

相关文章
|
7月前
|
存储 Shell Linux
【Shell 命令集合 网络通讯 】Linux 显示Unix-to-Unix Copy (UUCP) 系统的状态信息 uustat命令 使用指南
【Shell 命令集合 网络通讯 】Linux 显示Unix-to-Unix Copy (UUCP) 系统的状态信息 uustat命令 使用指南
85 0
|
7月前
|
缓存 网络协议 Unix
Linux(UNIX)五种网络I/O模型与IO多路复用
Linux(UNIX)五种网络I/O模型与IO多路复用
178 0
|
7月前
|
网络协议 Unix Linux
在Unix/Linux shell中,与网络相关的命令
在Unix/Linux shell中,与网络相关的命令
74 2
|
Unix Linux 索引
【Unix/Linux】文档标准
【Unix/Linux】文档标准
121 0
|
缓存 安全 网络协议
【Unix/Linux 系统管理】内容分发网络
【Unix/Linux 系统管理】内容分发网络
141 0
|
设计模式 安全 网络协议
Unix 网络 IO 模型
文件描述符(file descriptor,简称 fd)在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于 UNIX、Linux 这样的操作系统。
Unix 网络 IO 模型
|
缓存 网络协议 安全
Java 的I/O、NIO ,Java IO 模型,Unix 网络 IO 模型等相关概念的解析
java Io流共涉及40多个类,这些类看上去很杂乱,但实际上很有规则,而且彼此之间存在非常紧密的联系, Java Io流的40多个类都是从如下4个抽象类基类中派生出来的。
Java 的I/O、NIO ,Java IO 模型,Unix 网络 IO 模型等相关概念的解析
|
设计模式 Java Unix
Java 网络编程实战(二) - Unix的I/O模型解析
Java 网络编程实战(二) - Unix的I/O模型解析
168 0
Java 网络编程实战(二) - Unix的I/O模型解析
|
网络协议 Unix Docker
网络协议之:socket协议详解之Unix domain Socket
网络协议之:socket协议详解之Unix domain Socket