《UNIX环境高级编程》笔记--UNIX标准化及实现
来源:互联网 发布:js 数组由小到大排序 编辑:程序博客网 时间:2024/06/05 03:26
1.UNIX标准化
1.1.ISO C
1989年后期,C程序设计语言的ANSI(American National Standards Institute)标准X3.159-1989得到批准(ANSI 1989)。
此标准已被采用为国际标准ISO/IEC 9899:1990。
1999年,ISO C给根性为ISO/IEC 9899:1999。
按照ISO C标准定义了各个头文件(header),可将ISO C库分成24个区。下表列出了C标准定义的各个头文件。
1.2.IEEE POSIX
POSIX是一系列由IEEE(Institute of Electrical and Electronics Engineers)制定的标准,POSIX(Portable Operating System
Interface)是指可移植的操作系统接口。
POSIX标准通常被称为POSIX.1,下面各表总结了POSIX.1指定的必需和可选的头文件。因为POSIX.1包含ISO C标准库函数,所
以还需要ISO C中列出的头文件。
POSIX标准定义的必需的头文件
POSIX标准定义的XSI扩展头文件
POSIX标准定义的可选头文件
POSIX接口可以分为必需接口和可选接口,可选接口按功能又进一步分成50个区,下表总结了没有被弃用的编程接口。
1.3.Single UNIX Specification
Single UNIX Specification(单一UNIX规范)是POSIX.1标准的一个超集,它定义了一些附加的接口,这些接口扩展了POSIX.1
规范所提供的功能。相应的系统接口全集被称为X/open系统接口(XSI,X/Open System Interface)。__XOPEN_UNIX符号常量标识
了XSI扩展的接口。
XSI还定义了必须支持POSIX.1中的哪些可选部分才能认为是遵循XSI的(表中的SUS强制要求),只有遵循XSI的实现才能成为UNIX
系统。
1.4.FIPS
FIPS的含义是联邦信息处理标准(Federal Information Processing Standard),它是由美国政府出版,用于计算机系统的采购,
因为FIPS的影响正逐步减退,所以在本书中不再进一步考虑它。
2.UNIX系统实现
UNIX主要有三个分支:
1.AT&T分支,导出了系统Ⅲ和系统Ⅴ(UNIX商用版本)
2.加州大学伯克利分校分支,导出了4.xBSD实现。
3.AT&T贝尔实验室的计算机科学研究中心开发的UNIX研究版本,导出UNIX分时系统第8,9版以及于1990年发布的最后一版第10版。
UNIX系统主要有:
SVR4:UNIX SystemⅤ release 4.
4.4BSD:加州大学伯克利分校的计算机系统研究组研究开发和分发的。
FreeBSD:加州大学伯克利分校的计算机系统研究组决定终止其在UNIX操作系统的BSD版本上的研发中作后,设立了FreeBSD项目。
LINUX:其实不是UNIX,linux使用的是linux内核,只是提供了UNIX编程环境
Mac OS X:核心操作系统成为Darwin,基于Mach内核和FreeBSD系统的组合。
Solaris:由Sun公司开发的UNIX系统版本。
AIX:IBM版的UNIX。
HP-UX:HP版的UNIX。
IRIX:Silicon Graphics版的UNIX。
Unix Ware:SVR4派生的UNIX系统。
3.限制
UNIX系统实现定义了很多变量和常量,而且每个实现可能都不一样,为了能够促进标准化(有助于软件的可移植性),使用以下两种
类型的限制:
1.编译时限制(例如:短整型最大值是多少?)
2.运行时限制(例如:文件名可以有多少个字符?)
对于上面的2种限制具体是怎么实现的呢:
1.编译是限制(使用头文件)
2.不与文件或目录相关联的运行时限制(使用sysconf函数)
3.与文件或目录相关联的运行时限制(使用pathconf函数和fpathconf函数)
3.1.ISO C限制
ISO C定义的限制都是编译时限制。限制的常量都定义在头文件中,而且在一个系统中不会改变,例如在linux系统的/usr/include/limits.h
文件中定义了ISO C限制。
3.2.POSIX限制
POSIX.1的限制和常量被分成下列5类。
1.不变的最小值,如下图所示:
2.不变值:SSIZE_MAX
3.运行时可以增加的值:CHARCLASS_NAME_MAX,COLL_WEIGHTS_MAX,LINE_MAX,NGROUPS_MAX和RE_DUP_MAX。
4.运行时不变的值(可能不确定):ARG_MAX,CHILD_MAX,HOST_NAME_MAX,LOGIN_NAME_MAX,OPEN_MAX,PAGE_SIZE,
RE_DUP_MAX,STREAM_MAXS,SYMLOOP_MAX,TTY_NAME_MAX和TZNAME_MAX。
5.路径名可变值(可能不确定):FILESIZEBITS,LINK_MAX,MAX_CANON,MAX_INPUT,NAME_MAX,PATH_MAX,PIPE_BUFF
和SYMLINK_MAX。
3.3.XSI限制
XSI还定义了处理实现限制的下面几个常量:
1.不变最小值。
2.数值限制:LONG_BIT和WORD_BIT.
3.运行时不变值(可能不确定):ATEXIT_MAX,IOV_MAX和PAGE_SIZE。
3.4.sysconf函数,pathconf函数和fpathconf函数
这3个函数都是获取运行时限制时取得的。定义如下:
#include <unistd> long sysconf( int name ); long pathconf( const char *pathname, int name ); long fpathconf( int fd, int name );
sysconf函数的限制及name参数如下:
pathconf函数和fpathconf函数的限制及name参数如下:
这3个函数返回值代表的含义如下:
1.如果name不在上面的2个表中,则函数返回-1.并将errno设置为EINVAL。
2.有些name返回-1,这表示该值是不确定的,此时并不改变errno的值。
可以使用下面的代码判断函数返回值:
long val;errno = 0;if((val = sysconf(name)) < 0){if(errno != 0){if(errno == EINVAL){printf("not supported.\n");}else{printf("sysconf error");}} else {printf("no limit\n");}}else{printf("%ld\n",val);}
4.选项
在介绍POSIX标准是讲到了POSIX的选项(可选接口),如果我们程序与选项相关,需要确定系统是否支持该选项。
XSI定义了3种处理方法:
1.编译时预定义在<unistd.h>中。
2.与文件或目录无关的选项用sysconf函数确定。(name参数前缀_POSIX必须替换为_SC)
3.与文件或目录相关的选项用pathconf或fpathconf函数确定。(name参数前缀_POSIX必须替换为_PC)
如果符号常量未定义,则必须调用sysconf,pathconf或fpathconf以确定相应的选项是否受到支持。
如果该平台定义了符号常量,则有3种可能:
1.如果符号常量定义为-1,那么该平台不支持相应的选项。
2.如果符号常量定义大于0,那么该平台支持相应的选项。
3.如果符号常量定义为0,则必须调用sysconf,pathconf或fpathconf以确定相应的选项是否受到支持。
- 《UNIX环境高级编程》笔记--UNIX标准化及实现
- 《UNIX环境高级编程》笔记2--UNIX标准化及实现
- unix环境高级编程-2.2-unix标准化
- <<UNIX环境高级编程>>学习总结——第二章:UNIX标准化及实现
- UNIX环境高级编程(3):UNIX标准化及实现(1)
- UNIX环境高级编程(4):UNIX标准化及实现(2)
- UNIX环境高级编程1——UNIX基础知识及标准化
- 《UNIX环境高级编程》——UNIX标准及实现
- 《UNIX环境高级编程》---2 UNIX标准及实现
- 2.UNIX 环境高级编程--UNIX标准及实现
- UNIX环境高级编程(第三版)学习笔记(二、UNIX标准及实现)
- 《UNIX环境高级编程》笔记:第2章 UNIX标准及实现
- UNIX标准化及实现
- UNIX标准化及实现
- 《 Unix环境高级编程 》笔记
- 《 Unix环境高级编程 》笔记
- 《 Unix环境高级编程 》笔记
- Unix环境高级编程 笔记
- 静态变量和实例变量的区别
- 暑假月结
- AngularJs+bootstrap搭载前台框架——js控制部分
- [笔记]Cocoa训练营-cocos2d游戏编程篇-动画
- [原创]Xcode 4.6 安装 Boost 1.53.0
- 《UNIX环境高级编程》笔记--UNIX标准化及实现
- 多标签分类(multilabel classification )
- E2
- dazhilu飞鸽传书 2013 官方网站
- 某保密单位机要人员 A,B,C,D,E 每周需要工作5天,休息2天。 上级要求每个人每周的工作日和休息日安排必须是固定的,不能在周间变更。 此外,由于工作需要,还有如下要求:
- Linux延时函数
- 环境:GLScene 安装
- 嵌入式web服务器后台cgi使用socket与其他进程进行通信的源码
- E2