Unix 標準及實現

2021-09-14 02:44:16 字數 1743 閱讀 8955

人們在 unix 程式設計環境和 c 程式語言的標準化方面已經做了很多努力工作。在20世紀80年代 unix 版本種類快速增加,隨之而來的是它們之間的差別擴大,為了使不同種類的 unix 系統之間應有程式可以順利移植,人們開始呼籲進行unix標準化。

自從 2023年 美國國家標準化(ansi)提供c程式設計給iso,到iso c標準在2023年被更新。從此以後分別在2001、2004、2007 分別對1999 年iso c標準更新後存在的錯誤進行勘誤修正。隨著**商編譯系統不斷演化,對最新 iso c標準的支援也越來越多。

gcc 編譯器對iso c標準1999版本支援可參見 雖然c 標準都已經更新到2011 ,但是由於大量的編譯器還沒有對其做支援,所以我們在本章中沿用2023年 iso c標準。

按照該標準定義的各個標頭檔案可以將 iso c庫分成24個區。這些標頭檔案在4中unix系統中都支援(freebsd 8.0、linux 3.2.0、mac os x 10.6.8 和 solaris 10)

iso c 標頭檔案依賴於作業系統所配置的 c 編譯器版本。

posix.1 標準包含這些標頭檔案以及另外一些標頭檔案。這就說明posix.1 > iso c

前面提到的各個標準定義了任一實際系統的子集。本章關注4種實際的unix系統: freebsd 8.0、linux 3.2.0、mac os x 10.6.8 和 solaris 10。

unix 系統實現定義了很多幻數和常量,其中有很多已被硬編碼到程式中,或者用特殊的技術確定。由於大量標準化工作的努力,已有許多種可移植的方法用以確定這些幻數和具體實現定義的限制。這個是非常有助於unix環境下軟體的可移植性。

unix系統實現必須要有以下兩種型別限制:

編譯時限制。(比如,短整形的最大值是什麼?)

執行時限制。(比如,檔名有多少字元? )

編譯時限制可以在標頭檔案中定義。程式編譯時可以包含這些標頭檔案。執行時限制可以通過函式呼叫獲取限制值。

存在這一的情況,某些限制在乙個給定實現中可能是固定的,而在另乙個實現中則可能是變化的。這種型別顯示的乙個例子就是檔名的最大字元數。

比如,源於bsd的系統檔名的最大字元是255,這就可以在標頭檔案中定義這個限制。但是,現在大多數unix系統支援多檔案系統型別,每種型別的檔案系統都有自己的限制,所以需要一種動態獲取檔名長度限制的方法,這種情況就需要使用執行時限制,通過呼叫函式獲取限制。

為了解決這類問題,提供了一下3中限制

如果乙個特定的執行時限制在乙個給定的系統上並不改變,則可將其靜態地定義在乙個標頭檔案中,否則,應用程式就必須呼叫3和conf中的乙個來確定其執行時的值。

下圖中我們對比一下4種平台上fopen_max、tmp_max和filename_max的值。

限制freebsd 8.0

linux 3.2.0

mac os x 10.6.8

solaris 10

fopen_max

2016

2020

tmp_max

308915776

238328

308915776

17576

filename_max

1024

4097

1024

1024

posix.1 定義了很多涉及作業系統實現限制的常量。雖然posix.1定義了大量限制和實現,我們只關心與基本 posix.1介面有關的部分。這些限制和常量分成下面7類:

UNIX 環境高階程式設計 UNIX 標準及實現

github emai debugzhang 163.com 華為雲社群 本文為 unix 環境高階程式設計 第 2 章學習筆記 本章對 unix 環境程式設計的 3 個主要標準進行了說明 分析了這些標準對本書主要關注的 4 個實現所產生的影響 這些標準都試圖定義一些可能隨實現而更改的引數,但是這些...

APUE 第二章UNIX標準及實現

這一章的閱讀相對枯燥,20世紀80年代unix版本種類劇增以及他們之間的差別的擴大,導致很多使用者呼籲對其進行標準化。unix標準化介紹了iso c ieee posix single unix specification fips,這部分內容不詳細總結。unix系統實現介紹了 svr4 4.4bs...

UNIX標準化及實現之功能測試巨集

在標頭檔案中定義了很多posix.1和xsi的符號。但是除了posix.1和xsi的定義之外,大多數實現在這些標頭檔案中也加上了它們自己的定義。如果在編譯乙個程式時,希望它只使用posix定義而不使用任何實現自己定義的限制,那麼就需要定義常量 posix c source。所有posix.1標頭檔案...