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