UNIX標準及實現 UNIX標準化及實現之選項

1 POSIX的幾個協議html

1.1POSIX原來指的是可移植操做系統接口,原來指的只是IEEE標準1003.1-1998,後來擴展成爲不少標記的1003.1標準及標準草案(1003.1是一個組織)shell

注意: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前者包含了更多的實時接口,後者增長了事件跟蹤方面的擴展post

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,那麼該記錄項將被標識爲「不被支持」。




相關文章
相關標籤/搜索