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_IPV6 IPv6接口
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_UNIX X/Open扩展接口
XSR   _XOPEN_STREAMS XSI STREAMS

表1中列出了POSIX.1的选项,如果我们要编写一些可移植的应用程序,而这些程序与所有得到支持的选项有关,那么就需要一种可移植到方法以决定一种实现是否支持一个给定的选项。

如同对限制的处理一样,Single UNIX Specification定义了三种处理方法:

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

(2)与文件或目录无关的选项用sysconf函数确定。

(3)与文件或目录有关的选项通过调用pathconf或fpathconf函数来发现。

选项包括在表1第3列中的符号,以及列在表2和表3中的符号。如若符号常量未定义,则必须使用sysconf、pathconf或fpathconf以决定该选项是否受到支持。在这种情况下,这些函数的name参数前缀_POSIX必须替换为_SC或_PC。对于以_XOPEN为前缀的常量,则在构成name参数时必须在其前放置_SC或_PC字符串。

如果该平台定义了符号常量,则有以下三种可能:

(1)如果符号常量的定义值为-1,那么该平台不支持相应的选项。

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

(3)如果符号常量的定义值为0,则必须调用sysconf、pathconf或fpathconf以确定相应的选项是否受到支持。

表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,那么该记录项将被标识为“不被支持”。

本篇博文内容摘自《UNIX环境高级编程》(第二版),仅作个人学习记录所用。关于本书可参考:http://www.apuebook.com/

UNIX标准化及实现之选项的更多相关文章

  1. 《UNIX环境高级编程》笔记--UNIX标准化及实现

    1.UNIX标准化 1.1.ISO C 1989 年后期,C程序设计语言的ANSI(American National Standards Institute) 标准X3. 15 9-1989得到批准 ...

  2. UNIX标准化及实现之UNIX标准化、UNIX系统实现、标准和实现的关系以及ISO C标准头文件

    一.UNIX标准化 1.ISO C (International Organization for Standardization) 2.IEEE POSIX (Institue of Electri ...

  3. 第二章:UNIX标准化及实现

    本章节介绍个UNIX编程环境的标准化的进展,对ISO C,POSIX和Single UNIX Specification三个主要标准进行了说明 本章后面部分介绍了限制的具体实例. 我学习本章的心得是: ...

  4. UNIX标准化及实现之限制

    前言 UNIX系统实现定义了很多幻数和常量,其中有很多已被硬编码(关于硬编码和软编码:http://www.cnblogs.com/chenkai/archive/2009/04/10/1432903 ...

  5. UNIX标准化及实现之功能测试宏

    在头文件中定义了很多POSIX.1和XSI的符号.但是除了POSIX.1和XSI的定义之外,大多数实现在这些头文件中也加上了它们自己的定义.如果在编译一个程序时,希望它只使用POSIX定义而不使用任何 ...

  6. UNIX标准化及实现之POSIX标准必需头文件

    POSIX标准定义的必需头文件 头文件 说明 <dirent.h> 目录项 <fcntl.h> 文件控制 <fnmatch.h> 文件名匹配类型 <glob. ...

  7. UNIX标准化及实现之标准之间的冲突

    就整体而言,这些不同的标准之间配合得相当好.但是我们也很关注它们之间的差别,特别是ISO C标准和POSIX.1之间的差别. ISO C定义了函数clock,它返回进程使用的CPU时间,返回值类型是c ...

  8. UNIX标准化及实现之基本系统数据类型

    历史上,某些UNIX系统变量已与某些C数据类型联系在一起.例如,历史上主.次设备号一直存放在一个16位的短整型中,8位表示主设备号,另外8位表示次设备号.但是,很多较大的系统需要用多于256个值来表示 ...

  9. UNIX标准化及实现之POSIX标准可选头文件

    POSIX标准定义的可选头文件 头文件 说明 <aio.h> 异步I/O <mqueue.h> 消息队列 <pthread.h> 线程 <sched.h> ...

随机推荐

  1. 剑指Offer:二进制中1的个数

    题目:输入一个整数,输出该数二进制表示中1的个数. // 二进制中1的个数 #include <stdio.h> int wrong_count_1_bits(int n) // 错误解法 ...

  2. C++学习笔记:Vector容器

    vector v:初始化一个0大小的向量 vector v(10):初始化一个10个大小的向量 push_back:增加一个元素 pop:删除一个元素,不返回 front:返回第一个元素 back:返 ...

  3. NopCommerce架构分析之五------Model绑定Action参数

    asp.net MVC中Action参数不只是一些基本类型,也支持实体参数.那么从客户端传来的数据如何映射或转换成实体对象呢?就是通过实体绑定类ModelBinder.此系列类在请求转化为后台Cont ...

  4. 【转】Qt Creator在Windows上的调试器安装与配置

    https://www.librehat.com/qt-creator-on-windows-debugger-installation-and-configuration/

  5. 发布代码小助手V2.1发布了——Code2HTML工具

    设计起源: 新浪博客似乎没有插入代码的功能,所以不得不用打空格的方法格式化代码.而且没法显示行号. 描述: 发布代码小助手用python和Tkinter开发,可以在任何常见操作系统上运行.主要用于在不 ...

  6. IGT一道笔试题

    1到n连续的n个数 输入m 得出m个有序序列 比如 输入为n=5 ,m=3 则输出 543 542 541 532 531 521  432 431 421 321 当前长度为i,每个位上的取之范围为 ...

  7. Bzoj 2006: [NOI2010]超级钢琴 堆,ST表

    2006: [NOI2010]超级钢琴 Time Limit: 20 Sec  Memory Limit: 552 MBSubmit: 2222  Solved: 1082[Submit][Statu ...

  8. 《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇05:二段跳》

    5.二段跳 二段跳概述: 基本跑酷游戏的框架搭建完毕,开发者会根据开发的游戏特性,增设一些额外功能,使游戏具有可玩性性和画面感.下面我们以角色的二段跳为例,来了解在跑酷游戏中增设其它功能的流程.二段跳 ...

  9. ubuntu下一次网络流量危机

    为了便于团队合作,公司局域网搭建了一台服务器,安装了ubuntu 13.04. 一直相安无事.直到今天上午. 突然的大流量,让整个局域网网速慢下来,网页都打不开. 差不多一个小时都是这样,我还以为是公 ...

  10. Linux下如何保持gnome-terminal窗口执行命令后停留而不立刻关闭(gnome-terminal -x)

    Linux下如何保持gnome-terminal窗口执行命令后停留而不立刻关闭(gnome-terminal -x) 转自:http://jakfruit.blog.163.com/blog/stat ...