unix環境高階程式設計(第三版)-讀書筆記2
阿新 • • 發佈:2019-01-08
限制
unix系統實現定義了很多幻數和常量,其中有很多已被硬編碼到程式中,或用特定的技術確定。
已下兩種型別是必須的。
(1)編譯時限制(例如,短整型的最大值是什麼?)
(2)執行時限制(例如,檔名有多少個字串?)
編譯時限制可在標頭檔案中定義。程式在編譯時包含這些標頭檔案。但是執行時限制則要求程序呼叫一個函式獲取限制值。
某些限制在一個給定的實現中可能是固定的(因此可以靜態地在一個頭檔案中定義),而在另一個實現中是變動的(需要有一個執行時函式呼叫)。
為了解決這類問題,提供了已下3中限制:
- 編譯時限制(標頭檔案)
- 與檔案或目錄無關的執行時限制(sysconf函式)
- 與檔案或目錄有關的執行時限制(pathconf和fpathconf函式)
標準定義的限制
ISO C限制:
ISO C定義的所有編譯時限制都列在標頭檔案<limits.h>中。
POSIX 限制:
限制和常量分成下列7類:
- 數值限制:LONG_BIT、SSIZE_MAX和WORD_BIT。
- 最小值:_POSIX_PIPE_BUF、 _POSIX_MAX_CANON等。
- 最大值:_POSIX_CLOCKRES_MIN。
- 執行時可以增加的值:CHARCLASS_NAME_MAX 、COLL_WEIGHTS_MAX 、LINE_MAX 、NGROUPS_MAX 和RE_DUP_MAX。
- 執行時不變值:
名稱 | 說明 | 最小可接受值 |
---|---|---|
ARG_MAX | exec函式族的引數最大長度 | _POSIX_ARG_MAX |
ATEXIT_MAX | 可用 atexit函式登記的最大函式個數 | 32 |
CHILD_MAX | 每個實際使用者ID的子程序最大個數 | _POSIX_CHILD_MAX |
DELAYTIMER_MAX | 定時器最大超限執行次數 | _POSIX_DELAYTIMER_MAX |
HOST_NAME_MAX | gethostname返回的主機名長度 | _POSIX_HOST_NAME_MAX |
LOGIN_NAME_MAX | 登入名最大長度 | _POSIX_LOGIN_NAME_MAX |
OPEN_MAX | 賦予新建檔案描述符的最大值+1 | _POSIX_OPEN_MAX |
PAGESIZE | 系統記憶體頁大小(以位元組為單位) | POSIX |
RTSIG_MAX | 為應用程式預留的實時訊號的最大個數 | _POSIX_RTSIG_MAX |
SEM_NSEMS_MAX | 一個程序可使用的訊號量最大個數 | _POSIX_SEM_NSEMS_MAX |
SEM_VALUE_MAX | 訊號量的最大值 | _POSIX_SEM_VALUE_MAX |
SIGQUEUE_MAX | 一個程序可排隊訊號的最大個數 | _POSIX_SIGQUEUE_MAX |
STREAM_MAX | 一個程序一次可開啟的標準I/O流的最大個數 | _POSIX_STREAM_MAX |
SYMLOOP_MAX | 路徑解析過程中可訪問的符號連結數 | _POSIX_SYMLOOP_MAX |
TIMER_MAX | 一個程序的定時器最大個數 | _POSIX_TIMER_MAX |
TTY_NAME_MAX | 終端裝置名長度,其中包括終止的null位元組 | _POSIX_TTY_NAME_MAX |
TZNAME_MAX | 時區名的位元組數 | _POSIX_TZNAME_MAX |
- 其他不變值:NL_ARGMAX、NL_MSGMAX 、NL_SETMAX 和NL_TEXTMAX。
- 路徑名可變值:FILESIZEBITS、LINK_MAX 、MAX_CANON、MAX_INPUT 、NAME_MAX、 PATH_MAX、 PIPE_BUF 和 SYMLINK_MAX。
XSI 限制:
X/Open System Interfaces Extension, a supplementary specification to the Single UNIX Specification。Single UNIX Specification(SUS,單一UNIX規範)是POSIX.1標準的一個超集。
名稱 | 說明 | 最小可接受值 | 典型值 |
---|---|---|---|
NL_LANGMAX | 在 LANG 環境變數中最大位元組數 | 14 | 14 |
NZERO | 預設程序優先順序 | 20 | 20 |
_XOPEN_IOV_MAX | readv或writev可使用的最多iovec結構個數 | 16 | 16 |
XOPEN_NAME_MAX | 檔名中的位元組數 | 255 | 255 |
XOPEN_PATH_MAX | 路徑名中的位元組數 | 1024 | 1024 |