APUE第二章 Unix標準及實現

Unix標準化

ISO C

ISO定義C語言的標準,提供C程序的可移植性,使其能適應於除UNIX以外的操作系統。此標準不僅定義了C語言的語法和語義,還定義了其標準庫,也就是該標準定義了24個C語言的頭文件,例如stdio.h, math.h, stdlib.h都包含在這24個頭文件中。

IEEE POSIX

POSIX(Portable Operating System Interface)指的是可移植操作系統接口。POSIX.1包含了ISO C的標準庫函數。POSIX沒有包括超級用戶的概念,代之以規定某些操作需要“適當的優先權”。

Unix系統實現

SVR4

AT&T的Unix系統實驗室的產品。

BSD1

Berkeley Software Distribution是有加州大學伯克利分銷研究開發和分發的。最初的BSD系統包含了AT&T專有的源代碼。

Linux

Linux是一種提供類似於Unix的操作系統,在GNU公用許可證指導下,Linux是免費使用的。Linux常常是支持較新硬件的第一個操作系統。

Mac OS X

Mac OS X的核心操作系統爲Darwin,Mac OS X 10.5的Intel部分已經被驗證爲是一個Unix系統。

Solaris

Solaris是由sun公司(現爲Oracle)開發的Unix系統版本,它基於SVR4。

標準和實現的關係

在上述五種類Unix系統中,只有Mac OS和Solaris 10能夠稱自己是一種Unix系統,但是這五種系統都能提供Unix編程環境。因爲這五種系統在不同程度上符合POSIX標準,所以我們將重點關注POSIX.1標準所要求的功能。

限制

必需限制

(1)編譯時限制(如短整型最大值是什麼)
(2)運行時限制(如文件名最大多少個字符)
編譯時限制可在頭文件中定義,而運行時限制則要通過進程調用一個函數獲得限制值。

提供的限制

(1)編譯時限制(頭文件)
(2)與文件或目錄無關的運行時限制(sysconf函數)
(3)與文件或目錄有關的運行時限制(pathconf和fpathconf函數)

ISO C限制

ISO C定義的所有編譯時限制都列在頭文件

POSIX限制

與基本POSIX.1接口有關的限制和常量分成下列7類:
(1)數值限制:LONG_BIT、SSIZE_MAX和WORD_BIT。
(2)最小值:25個最小可接受值。例如登錄名的長度_POSIX_LOGIN_NAME_MAX爲9,描述了遵循POSIX.1系統最小可接受的登錄名爲9。
(3)最大值:_POSIX_CLOCKRES_MIN。
(4)運行時可以增加的值:CHARCLASS_NAME_MAX等。
(5)運行時不變值(不確定值):例如exec函數族的參數最大長度。
(6)其他不變值:NL_ARGMAX、NL_MSGMAX等。
(7)路徑可變值
在這些限制和變量中,某些可能定義在

函數sysconf、pathconf和fpathconf

#include <unistd.h>
long sysconf(int name);
long pathconf(const char *pathname, int name);
long fpathconf(int fd, int name);//fd爲文件描述符

不確定的運行時限制

如果有些限制值沒有在頭文件

路徑名

很多程序需要爲路徑名分配存儲區,一般來說在編譯時就要爲路徑名分配存儲區,而且不同程序使用不同的幻數,如256、512或標準I/O常量BUFSIZ。

最大打開文件數

支持Single Unix Specification中XSI擴展的系統提供了getrlimit(2)函數,它返回一個進程可以同時打開的描述符的最多個數。使用該函數,我們能夠檢測出對於進程能夠打開的文件數實際上並沒有設置上限。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章