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

2022-07-03 10:06:09 字數 2768 閱讀 8260

github:

emai: [email protected]

華為雲社群:

本文為《unix 環境高階程式設計》第 2 章學習筆記

本章對 unix 環境程式設計的 3 個主要標準進行了說明:

分析了這些標準對本書主要關注的 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 種處理選項的方法:

如果符號常量未定義,則必須使用sysconfpathconffpathconf來判斷是否支援該選項:

對於每乙個選項,有以下 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

返回位元組計數的函式(帶符號的,如readwrite

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程式設計介面的有關標準變化很大。本書在保持了前一版風格的基礎上,根據最新的標準對...