github:本章對 unix 環境程式設計的 3 個主要標準進行了說明:emai: [email protected]
華為雲社群:
本文為《unix 環境高階程式設計》第 2 章學習筆記
分析了這些標準對本書主要關注的 4 個實現所產生的影響:
這些標準都試圖定義一些可能隨實現而更改的引數,但是這些限制並不完美。
iso c 標準的意圖是提供 c 程式的可移植性,使其能適合於大量的不同的作業系統,而不只是適合 unix 系統。
標頭檔案說明
驗證程式斷言
複數算術運算支援
字元分類和對映支援
出錯碼浮點環境
浮點常量及特性
整型格式變換
賦值、關係及一元操作符巨集
實現常量
本地化類別及相關定義
數學函式、型別宣告及常量
非區域性 goto
訊號可變長度參數列
布林型別和值
標準定義
整型標準 i/o 庫
實用函式
字串操作
通用型別數學巨集
時間和日期
擴充的多位元組和寬字元支援
寬字元分類和對映支援
posix 指的是可移植作業系統介面。
single unix specification 是 posix.1 標準的乙個超集,它定義了一些附加介面擴充套件了 posix.1 規範提供的功能。
標準只是介面的規範,這些標準由廠商採用,然後轉變成具體實現。
目前 unix 主要有以下實現:
unix 系統實現定義了很多幻數和常量,其中有很多已被硬編碼到程式中,或用特定的技術確定。
以下兩種型別的限制是必需的:
執行時限制(檔名有多少個字元?)
某些限制在乙個給定的實現中可能是固定的(因此可以靜態地在乙個標頭檔案中定義),而在另乙個實現中則可能是變動的(需要有乙個執行時函式呼叫),這種型別限制的乙個例子是檔名的最大字元數。
為了解決這類問題,提供了以下 3 種限制:
iso c 定義的所有編譯時限制都列在標頭檔案 中,這些限制常量在乙個給定系統中並不會改變。
標頭檔案還定義了 3 個編譯時限制:
tmp_max
filename_max
posix.1 定義了很多涉及作業系統實現限制的常量,這些限制和常量分成下列 7 類:
在這些限制和常量中,某些可能定義在 中,其餘的按具體條件可定義、可不定義。
這些最小值是不變的,不隨系統而改變,它們指定了這些特徵最具約束性的值。
執行時限制可呼叫下面 3 個函式之一獲得:
#include long sysconf(int name);
long pathconf(const char *pathname, int name);
long fpathconf(int fd, int name);
引數:
pathname
:路徑名
fd
:檔案描述符
返回值:
守護程序(daemon process)是指在後台執行且不與終端相連線的一種程序。
如果我們要編寫可移植的應用程式,而這些程式可能會依賴於這些可選的支援的功能,那麼就需要一種可移植的方法來判斷是否支援乙個給定的選項。
posix.1 定義了 3 種處理選項的方法:
如果符號常量未定義,則必須使用sysconf
、pathconf
或fpathconf
來判斷是否支援該選項:
對於每乙個選項,有以下 3 種可能的平台支援狀態;
標頭檔案 中定義了某些與實現有關的資料型別,它們被稱為基本系統資料型別。在標頭檔案中,這些資料型別都是用 c 的typedef
來定義的,它們絕大多數都以_t
結尾。用這種方式定義了這些資料型別後,就不再需要考慮因系統不同而變化的程式實現細節。
型別說明
clock_t
時鐘滴答計數器(程序時間)
comp_t
壓縮的時鐘滴答(posix.1 未定義)
dev_t
裝置號(主和次)
fd_set
檔案描述符集
fpos_t
檔案位置
gid_t
數值組 id
ino_t
i 節點編號
mode_t
檔案型別,檔案建立模式
nlink_t
目錄項的鏈結計數
off_t
檔案長度和偏移量(帶符號的,如lseek
)
pid_t
程序 id 和程序組 id(帶符號的)
pthread_t
執行緒 id
ptrdiff_t
兩個指標相減的結果(帶符號的)
rlim_t
資源限制
sig_atomic_t
能原子性地訪問的資料型別
sigset_t
訊號集size_t
物件(如字串)長度(不帶符號的)
ssize_t
返回位元組計數的函式(帶符號的,如read
、write
)
time_t
日曆時間的秒計數器
uid_t
數值使用者 id
wchar_t
能表示所有不同的字元碼
unix環境高階程式設計
unix 日曆時間 自1970 年1 月1 日00 00 00 以來的國際標準時間 utc 程序時間 cpu 時間 時鐘時間 程序執行時間的總量。使用者cpu 時間 執行使用者指令時間量。系統cpu 時間 執行核心所經歷時間。命令 time 第三章至第七章 原子操作 任何乙個要求多於1 個函式呼叫的...
unix環境高階程式設計
檔案描述符file descriptor通常是乙個小的非負整數,核心用以標識乙個特定程序正在訪問的檔案。當核心開啟乙個現有檔案或建立乙個新檔案時,它都返回乙個檔案描述符。在讀寫檔案時,可以私用這個檔案描述符。按管理,每當執行乙個新程式時,所有的shell都為其開啟了3個標準檔案描述符 標準輸入,標準...
UNIX環境高階程式設計
本書是被譽為unix程式設計 聖經 的advanced programming in the unix environment一書的更新版。在本書第1版出版後的十幾年中,unix行業已經有了巨大的變化,特別是影響unix程式設計介面的有關標準變化很大。本書在保持了前一版風格的基礎上,根據最新的標準對...