UNIX标准及实现

1 POSIX的几个协议

1.1POSIX原来指的是可移植操作系统接口,原来指的只是IEEE标准1003.1-1998,后来扩展成为很多标记的1003.1标准及标准草案(1003.1是一个组织)

注意:1003.1标准说明了一个接口而不是一种实现,所以并不区分系统调用和库函数

1.21003.1的演化

1>IEEE 1003.1-1998经修改交给ISO最终作为IEEE标准1003.1-1990正式出版,这就是国际标准9945.1:1990(POSIX.1)

2>1996年标准的修订版发布(IEEE管的),包括1003.1-1990,1003.1b-1993实时扩展标准,pthreads多线程编程接口

这就是国际标准ISO/IEC 9945-1:1996

3>1999年出版了1003.1d-1999(增加了更多的实时接口)(是在以前的基础上增加的内容)

4>2000年出版了1003j-2000和1003.1q-2000前者包含了更多的实时接口,后者增加了事件跟踪方面的扩展

5>2001年组合了多个1003.1的修正,1003,2标准以及SUS第二版的若干不分,这些形成了1003.1-2001标准

(主要是包括了上诉的协议和自己修正的以及SUS的若干部分)

APUE P22页

6>2004年说明随着技术勘误更新

7>2009年发布国际标准ISO/IEC9945:2009

1.3POSIX所定义有必须的头文件和可选的头文件,接口分成两部分,有可选接口和必须接口其中可选接口分成四十个功能分区P24

1.4SUS单一UNIX规范

POSIX.1中的XSI接口选项描述了可选接口,也定义了遵循XSI的实现必须支持的POSIX.1的那些可选部分,这些部分在图2-5中被标记为SUS强制的,只有遵循XSI的实现才能成为UNIX系统(有些接口在尊徐XSI系统中是可选的,这些接口根据功能分成若干选项组,有加密,实时,高级实时等。。。。P25页)

1.5 
SUS的演化

SUS是Open Group的出,Open Group是由X/open和OSF两个组织组成的

SUS第一版,为了改善可移植性,定义了1170个接口

SUS第二版,新版增加了对线程,实时接口,64位处理等功能的支持

SUS第三版,基本规范和1003.1-2001相同,分成四个部分,基本定义,系统接口,sheel和实用程序

SUS第四版,包括了更正和新的接口,移除弃用 的接口,以及一些可选的接口变为了必选接口,(SUS是POSIX.1的一个超集,里面也有可选和必选接口,遵循SUS的才被成为是UNIX系统)

2限制

2.1限制分为编译时限制和运行时限制

编译时限制应该在头文件中进行定义,在头文件中有定义的限制就叫做编译时限制

而运行时限制应该利用sysconf,pathconf,fpathconf函数进行确定

但是注意,如果一个运行时限制在一个系统中并不改变,择可以定义在头文件中

POSIX的限制包括了七类(1)最小值(2)最大值.......(4)运行是可以增加的值。这只是一种分类方式,其中运行时可以增加的值也可以是最小值或者最大值类别(这其中分类方式有的是编译时限制有的是运行时限制,并不是确定的,但是里面的运行时不变直一般是编译时限制!!!)

2.2不确定的运行时限制

注意,特别注意:如果某个限制值没有在头文件中定义,那么在编译的时候不能使用,但是如果他们的值不能确定,那么运行的时候也可能是未定义的,所以说限制有编译时限制,运行时限制可确定,运行时限制不可确定,三种

3选项

3.1定义:如果我们编写可移植的应用程序,而这些程序可能会依赖于这些可选的功能,那么就需要一种方法判断实现是否支持一个给定的选项

3.2几种处理选项的方法

1>编译时选项定义在<unistd.h>中

2>与文件或目录无关的运行时选项用sysconf

3>与文件或目录有关的运行时选项通过调用pathconf或fpathconf函数来判断

3.3三种平台支持状态

1)如果符号常亮没有定义或者定义为-1,那么改平台并不支持该选项

2)如果符号常量的定义值大于0,那么改平台支持相应的选项

3)如果符号常量的定义值为0,则必须调用sysconf,pathconf,fpathconf来判断是否支持

3选项

http://www.cnblogs.com/nufangrensheng/p/3497135.html

UNIX标准化及实现之选项

POSIX.1的2001版,包括了ISO C标准所指定的各个函数。其接口分成了两类:必需接口和可选接口。可选接口按功能又进一步分成50个区。表1中按它们各自的选项代码总结了没有被弃用的编 程接口。选项代码是由2-3个字符构成的字母缩写,以便标识属于各个功能区的接口。选项代码会突出显示手册相关页面上的文本,表明接口依赖于对特定选项的 支持。很多选项处理实时扩展。

表1 POSIX.1可选接口组和代码(SUS,Single UNIX Specification)

代码SUS强制要求符号常量说明
ADV
_POSIX_ADVISORY_INFO建议性信息(实时)
AIO
_POSIX_ASYNCHRONOUS_IO异步输入和输出(实时)
BAR
_POSIX_BARRIERS屏障(实时)
CPT
_POSIX_CPUTIME进程CPU时钟(实时)
CS
_POSIX_CLOCK_SELECTION时钟选择(实时)
CX
ISO C标准扩展
FSC_POSIX_FSYNC文件同步
IP6
_POSIX_IPV6IPv6接口
MF_POSIX_MAPPED_FILES存储映射文件
ML
_POSIX_MEMLOCK进程存储区加锁(实时)
MLR
_POSIX_MEMLOCK_RANGE存储区域加锁(实时)
MON
_POSIX_MONOTONIC_CLOCK单调时钟(实时)
MPR_POSIX_MEMORY_PROTECTION存储保护
MSG
_POSIX_MESSAGE_PASSING消息传送(实时)
MX

IEC 60559浮点选项
PIO
_POSIX_PRIORITIZED_IO优先输入和输出
PS
_POSIX_PRIORITIZED_SCHEDULING进程调度(实时)
RS
_POSIX_RAW_SOCKETS原始套接字
RTS
_POSIX_REALTIME_SIGNALS实时信号扩展
SEM
_POSIX_SEMAPHORES信号量(实时)
SHM
_POSIX_SHARED_MEMORY_OBJECTS共享存储对象(实时)
SIO
_POSIX_SYNCHRONIZED_IO同步输入和输出(实时)
SPI
_POSIX_SPIN_LOCKS自旋锁(实时)
SPN
_POSIX_SPAWN产生(实时)
SS
_POSIX_SPORADIC_SERVER进程散发性(不定时发生的)服务器(实时)
TCT
_POSIX_THREAD_CPUTIME线程CPU时钟(实时)
TEF
_POSIX_TRACE_EVENT_FILTER跟踪事件过滤器
THR_POSIX_THREADS线程
TMO
_POSIX_TIMEOUTS超时(实时)
TMR
_POSIX_TIMERS计时器(实时)
TPI
_POSIX_THREAD_PRIO_INHERIT线程优先级集成(实时)
TPP
_POSIX_THREAD_PRIO_PROTECT线程优先级保护(实时)
TPS
_POSIX_THREAD_PRIORITY_SCHEDULING线程执行调度(实时)
TRC
_POSIX_TRACE跟踪
TRI
_POSIX_TRACE_INHERIT跟踪继承
TRL
_POSIX_TRACE_LOG跟踪日志
TSA_POSIX_THREAD_ATTR_STACKADDR线程栈地址属性
TSF_POSIX_THREAD_SAFE_FUNCTION线程安全的函数
TSH_POSIX_THREAD_PROCESS_SHARED线程进程共享的同步
TSP
_POSIX_THREAD_SPORADIC_SERVER线程散发性服务器(实时)
TSS_POSIX_THREAD_ATTR_STACKSIZE线程栈地址大小
TYM
_POSIX_TYPED_MEMORY_OBJECTS类型化的存储对象(实时)
XSI_XOPEN_UNIXX/Open扩展接口
XSR
_XOPEN_STREAMSXSI STREAMS


表2 sysconf的选项及name参数

选项名字说明name参数
_POSIX_JOB_CONTROL指明此实现是否支持作业控制_SC_JOB_CONTROL
_POSIX_READER_WRITER_LOCKS指明此实现是否支持读者-写者锁_SC_READER_WRITER_LOCKS
_POSIX_SAVED_IDS指明此实现是否支持saved set-uesr-ID和saved set-group-ID_SC_SAVED_IDS
_POSIX_SHELL指明此实现是否支持POSIX shell_SC_SHELL
_POSIX_VERSION指明POSIX.1版本_SC_VERSION
_XOPEN_CRYPT指明此实现是否支持XSI加密选项组_SC_XOPEN_CRYPT
_XOPEN_LEGACY指明此实现是否支持XSI遗留选项组_SC_XOPEN_LEGACY
_XOPEN_REALTIME指明此实现是否支持XSI实时选项组_SC_XOPEN_REALTIME
_XOPEN_REALTIME_THREADS指明此实现是否支持XIS实时 线程选项组_SC_XOPEN_REALTIME_THREADS
_XOPEN_VERSION指明XSI版本_SC_XOPEN_VERSION

 

表3 pathconf和fpathconf的选项及name参数

选项名字说明name参数
_POSIX_CHOWN_RESTRICTED指明使用chown是否是受限制的_PC_CHOWN_RESTRICTED
_POSIX_NO_TRUNC指明路径名长于NAME_MAX是否会出错_PC_NO_TRUNC
_POSIX_VDISABLE若定义,可以用此值禁用终端特殊字符_PC_VDISABLE
_POSIX_ASYNC_IO指明对相关联的文件是否可以使用异步I/O_PC_ASYNC_IO
_POSIX_PRIO_IO指明对相关联的文件是否可以使用优先的I/O_PC_PRIO_IO
_POSIX_SYNC_IO指明对相关联的文件是否可以使用同步I/O_PC_SYNC_IO

 

如果系统限制一样,关于sysconf、pathconf和fpathconf如何处理选项,有如下几点值得注意:

(1)_SC_VERSION的返回值表示与该标准相关的年(以4位数表示)和月(以2位数表示)。该值可能是198808L、199029L、199506L,或者表示该版本后续版本的其他值,与SUS v3相关的值是200112L。

(2)_SC_XOPEN_VERSION的返回值表示该系统遵循的XSI版本。与SUS v3相关联的值是600。

(3)_SC_JOB_CONTROL、_SC_SAVED_IDS以及_PC_VDISABLE的值不再表示可选功能。从SUS v3起,不再需要这些功能,但这些符号仍然被保留,以便向后兼容。

(4)如果所指定的pathname或filedes不支持此功能,那么_PC_CHOWN_RESTRICTED和_PC_NO_TRUNC返回-1,而不会改变errno。

(5)_PC_CHOWN_RESTRICTED引用的文件必须是文件或者目录。如果是目录,那么返回值指明该选项是否可应用于该目录中的各个文件。

(6)_PC_NO_TRUNC引用的文件必须是一个目录。其返回值可用于该目录中的各个文件名。

(7)_PC_VDISABLE引用的文件必须是一个终端文件。

为了遵循SUS v3,如果定义了某个选项符号,那么其值应该设置为0、-1或200112。如果未定义一个功能,也就是该系统未定义符号常量或对应的_SC或_PC名 字,则将记录项标记为“未定义”。与此相对照,“已定义”记录项表示该符号常量已定义,但未指定值(例如:#define _POSIX_THREADS )。如若系统定义了符号常量,但其值为-1或0,但相应的sysconf或pathconf调用返回-1,那么该记录项将被标识为“不被支持”。






转载于:https://www.cnblogs.com/SmileLion/p/5863570.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值