zoukankan      html  css  js  c++  java
  • 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_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


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






  • 相关阅读:
    convert image to base64 and post to RESTful wcf
    在android webview实现截屏的手动tounchmove裁剪图片
    How to use jquery ajax and android request security RESTful WCF
    using swfUpload in asp.net mvc
    using HttpClient and sending json data to RESTful server in adroind
    ODP.NET数据访问
    android image watermark
    解决国内不能访问github的问题
    idapro权威指南第二版阅读笔记第九章 交叉引用和绘图功能
    idapro权威指南第二版阅读笔记第二章 逆向和反汇编工具
  • 原文地址:https://www.cnblogs.com/SmileLion/p/5863570.html
Copyright © 2011-2022 走看看