《UNIX网络编程 卷1:套接字联网API(第3版)》——1.10 Unix标准

简介: 历史上多数Unix系统或者源自Berkeley,或者源自System V,不过这些差别在慢慢消失,因为大多数厂商已开始采纳这些标准。然而在系统管理的处理上两者仍然存在较大差别,这个领域目前还没有标准可循。

本节书摘来自异步社区《UNIX网络编程 卷1:套接字联网API(第3版)》一书中的第1章,第1.10节,作者:【美】W. Richard Stevens , Bill Fenner , Andrew M. Rudoff著,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.10 Unix标准

在编写本书时,最引人注目的Unix标准化活动是由Austin公共标准修订组(The Austin Common Standards Revision Group,CSRG)主持的。他们的努力结果是涵盖1 700多个编程接口的约4 000页内容的规范[Josey 2002]。这些规范既具有IEEE POSIX名字,也具有开放团体的技术标准(The Open Group’s Technical Standard)名字。其结果是同一个Unix标准有多个名字来指称:ISO/IEC 9945:2002、IEEE Std 1003.1-2001和单一Unix规范第3版(Single Unix Specification Version 3)都指同一个标准。本书中除了像本节这样需要讨论各种较早期标准各自特性的章节外,我们简单地称这个Unix标准为POSIX规范(The POSIX Specification)。

获取这个统一标准的最简易方法是定购其CD-ROM拷贝或通过Web免费访问。

1.10.1 OSIX的背景
POSIX(可移植操作系统接口)是Portable Operating System Interface的首字母缩写。它并不是单个标准,而是由电气与电子工程师学会(the Institute for Electrical and Electronics Engineers, Inc.)即IEEE开发的一系列标准。POSIX标准已被国际标准化组织即ISO和国际电工委员会(the International Electrotechnical Commission)即IEC采纳为国际标准(这两个组织合称为ISO/IEC)。下面是POSIX标准的发展简史。

第一个POSIX标准是IEEE Std 1003.1-1988(317页)。它详述了进入类Unix内核的C语言接口,涵盖了下述领域:进程原语(fork、exec、信号和定时器)、进程环境(用户ID和进程组)、文件与目录(所有I/O函数)、终端I/O、系统数据库(口令文件和用户组文件)以及tar和cpio归档格式。
第一个POSIX标准在1986年是称为“IEEE-IX”的试用版。POSIX这个名字是由Richard Stallman建议使用的。

第二个POSIX标准是IEEE Std 1003.1-1990(356页),也称为ISO/IEC 9945-1: 1990。从1988版本到1990版本只做了少量的修改。新添的副标题为“Part 1: System Application Program Interface (API) [C Language]”,表明本标准为C语言API。
下一个标准是两卷本的IEEE Std 1003.2-1992(约1300页)。它的副标题为“Part 2: 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工作组开发的实时扩展。1003.1b-1993相比1990年版标准新增的条目包括:文件同步、异步I/O、信号量、存储管理(mmap和共享内存)、执行调度、时钟与定时器以及消息队列。
更下一个标准是IEEE Std 1003.1 1996年版[IEEE 1996](743页),也称为ISO/IEC 9945-1: 1996,它包括1003.1-1990(基本API)、1003.1b-1993(实时扩展)、1003.1c-1995(pthreads)和1003.1i-1995(对1003.1b的技术性修订)。该标准增添了3章关于线程的内容,并另有关于线程同步(互斥锁和条件变量)、线程调度和同步调度的各节。本书称这个标准为POSIX.1。该标准还有一个前言,其中声明ISO/IEC 9945由下面3个部分构成。
Part 1: System API (C language)——第1部分:系统API(C语言)。
Part 2: Shell and utilities——第2部分:Shell和实用程序。
Part 3: System administration——第3部分:系统管理(正在开发中)。

第1部分和第2部分就是我们所说的POSIX.1和POSIX.2。

743页中有超过四分之一的篇幅是一个标题为“Rationale and Notes”(理由与注解)的附录。该附录含有历史性信息和某些特性被加入或删除的理由。这些理由通常跟正式标准一样有教益。

最后一个标准是在2000年被认可⑩的IEEE Std : Protocol-independent interfaces (PII)。在单一Unix规范第3版(The Single Unix Specification Version 3)面世之前,这是与本书涵盖的主题最为相关的POSIX产品。它是联网API标准,它定义了两个API,并称它们为详尽网络接口(Detailed Network Interface,DNI)。
DNI/Socket,基于4.4BSD的套接字API。
DNI/XTI,基于X/Open的XPG4规范。
这个标准的工作作为P1003.12工作组(后来改名为P1003.1g)起始于20世纪80年代后期。本书称这个标准为POSIX.1g。

1.10.2 开放团体的背景
开放团体(The Open Group)是由1984年成立的X/Open公司(X/Open Company)和1988年成立的开放软件基金会(Open Software Foundation,OSF)于1996年合并成的组织。它是厂商、工业界最终用户、政府和学术机构共同参加的国际组织。下面是开放团体制定的标准的简要背景。

X/Open公司于1989年出版了X/Open Portability Guide(X/Open移植性指南,XPG)第3期,即XPG3。
XPG第4期即XPG4出版于1992年,其第2版出版于1994年。这个最新版本也称为“Spec 1 ,其中魔数1170是系统接口数(926个)、头文件数(70个)和命令数(174个)的总和。这组规范的最终名字是X/Open Single Unix Specification(X/Open单一Unix规范),也称为“Unix 95。
单一Unix规范第2版于1997年3月发行。符合这个规范的产品称为“Unix 98”。本书就称这个规范为“Unix 98”。Unix 98的接口数目从1170个增长到1434个,而用于工作站的接口数则达到3 030个,因为它包含公共桌面环境(Common Desktop Environment,CDE),而公共桌面环境又需要X Windows系统和Motif用户接口。Unix 98为套接字API和XTI API定义了网络支持服务。这个规范与POSIX.1g几乎相同。

不幸的是,X/Open称它们的网络标准为XNS:X/Open Networking Services。定义Unix 98套接字和XTI的文档的这一版本称为“XNS Issue (XNS第5期)。在网络界,XNS已是Xerox Network Systems体系结构的简称。所以,我们避免使用XNS,而称这个X/Open文档为Unix 98网络API标准。

1.10.3 标准的统一
如本节开头所提,伴随Austin CSRG发布单一Unix规范第3版,POSIX和开放团体都继续发展,达成统一的标准。CSRG促成50多家公司就单一标准达成一致意见,这在Unix发展史上确实是一件划时代之大事。如今大多数Unix系统都符合POSIX.1和POSIX.2的某个版本,不少系统符合单一Unix规范第3版。

历史上多数Unix系统或者源自Berkeley,或者源自System V,不过这些差别在慢慢消失,因为大多数厂商已开始采纳这些标准。然而在系统管理的处理上两者仍然存在较大差别,这个领域目前还没有标准可循。

本书的焦点是单一Unix规范第3版,其中又以套接字API为主。只要可能,我们就使用标准函数。

1.10.4 因特网工程任务攻坚组
因特网工程任务攻坚组(Internet Engineering Task Force,IETF)是一个由关心因特网体系结构的发展及其顺利运作的网络设计者、操作员、厂商和研究人员联合组成的开放的国际团体。它向任何感兴趣的个人开放。

因特网标准处理过程在RFC 2026[Bradner 1996]中说明。因特网标准一般处理协议问题而不是编程API,不过仍有两个RFC(RFC 3493[Gilligan et al. 2003]和RFC 3542[Stevens et al. 2003])说明了IPv6的套接字API。它们是信息性的RFC,并不是标准,制定它们的目的是加速部署由多家从事IPv6工作较早的厂商所开发的可移植网络应用程序。尽管标准主体趋于花费很长的时间,其中许多API却已经在单一Unix规范第3版中标准化了。

相关文章
|
7月前
|
网络协议 安全 网络安全
Python网络编程详解:Socket套接字的使用与开发
探索Python网络编程:本文详述Socket套接字,关键组件用于设备间通信。理解Socket类型(TCP/UDP),学习创建、绑定、监听、发送/接收数据步骤。示例展示服务端和客户端实现,及Socket聊天室应用。了解并发处理、错误处理和网络安全。通过学习,提升网络应用开发技能。参考书籍深入学习。
180 2
|
7月前
|
存储 Shell Linux
【Shell 命令集合 网络通讯 】Linux 显示Unix-to-Unix Copy (UUCP) 系统的状态信息 uustat命令 使用指南
【Shell 命令集合 网络通讯 】Linux 显示Unix-to-Unix Copy (UUCP) 系统的状态信息 uustat命令 使用指南
77 0
|
2月前
|
Java
[Java]Socket套接字(网络编程入门)
本文介绍了基于Java Socket实现的一对一和多对多聊天模式。一对一模式通过Server和Client类实现简单的消息收发;多对多模式则通过Server类维护客户端集合,并使用多线程实现实时消息广播。文章旨在帮助读者理解Socket的基本原理和应用。
33 1
|
3月前
|
网络协议 算法 网络性能优化
C语言 网络编程(十五)套接字选项设置
`setsockopt()`函数用于设置套接字选项,如重复使用地址(`SO_REUSEADDR`)、端口(`SO_REUSEPORT`)及超时时间(`SO_RCVTIMEO`)。其参数包括套接字描述符、协议级别、选项名称、选项值及其长度。成功返回0,失败返回-1并设置`errno`。示例展示了如何创建TCP服务器并设置相关选项。配套的`getsockopt()`函数用于获取这些选项的值。
|
4月前
|
网络协议 Java
一文讲明TCP网络编程、Socket套接字的讲解使用、网络编程案例
这篇文章全面讲解了基于Socket的TCP网络编程,包括Socket基本概念、TCP编程步骤、客户端和服务端的通信过程,并通过具体代码示例展示了客户端与服务端之间的数据通信。同时,还提供了多个案例分析,如客户端发送信息给服务端、客户端发送文件给服务端以及服务端保存文件并返回确认信息给客户端的场景。
一文讲明TCP网络编程、Socket套接字的讲解使用、网络编程案例
|
7月前
|
网络协议 算法 网络性能优化
网络编程:TCP/IP与套接字
网络编程:TCP/IP与套接字
|
7月前
|
网络协议 网络架构 Python
Python 网络编程基础:套接字(Sockets)入门与实践
【5月更文挑战第18天】Python网络编程中的套接字是程序间通信的基础,分为TCP和UDP。TCP套接字涉及创建服务器套接字、绑定地址和端口、监听、接受连接及数据交换。UDP套接字则无连接状态。示例展示了TCP服务器和客户端如何使用套接字通信。注意选择唯一地址和端口,处理异常以确保健壮性。学习套接字可为构建网络应用打下基础。
74 7
|
7月前
|
存储 网络协议 Java
[计算机网络]---网络编程套接字
[计算机网络]---网络编程套接字
|
6月前
|
网络协议 Java API
网络编程套接字(4)——Java套接字(TCP协议)
网络编程套接字(4)——Java套接字(TCP协议)
58 0
|
6月前
|
Java 程序员 Linux
网络编程套接字(3)——Java数据报套接字(UDP协议)
网络编程套接字(3)——Java数据报套接字(UDP协议)
53 0
下一篇
DataWorks