1. 程式人生 > >unix環境高階程式設計(第三版)-讀書筆記2

unix環境高階程式設計(第三版)-讀書筆記2

限制

unix系統實現定義了很多幻數和常量,其中有很多已被硬編碼到程式中,或用特定的技術確定。
已下兩種型別是必須的。
(1)編譯時限制(例如,短整型的最大值是什麼?)
(2)執行時限制(例如,檔名有多少個字串?)
編譯時限制可在標頭檔案中定義。程式在編譯時包含這些標頭檔案。但是執行時限制則要求程序呼叫一個函式獲取限制值。
某些限制在一個給定的實現中可能是固定的(因此可以靜態地在一個頭檔案中定義),而在另一個實現中是變動的(需要有一個執行時函式呼叫)。
為了解決這類問題,提供了已下3中限制:

  1. 編譯時限制(標頭檔案)
  2. 與檔案或目錄無關的執行時限制(sysconf函式)
  3. 與檔案或目錄有關的執行時限制(pathconf和fpathconf函式)

標準定義的限制

ISO C限制:
ISO C定義的所有編譯時限制都列在標頭檔案<limits.h>中。
POSIX 限制:
限制和常量分成下列7類:

  1. 數值限制:LONG_BIT、SSIZE_MAX和WORD_BIT。
  2. 最小值:_POSIX_PIPE_BUF、 _POSIX_MAX_CANON等。
  3. 最大值:_POSIX_CLOCKRES_MIN。
  4. 執行時可以增加的值:CHARCLASS_NAME_MAX 、COLL_WEIGHTS_MAX 、LINE_MAX 、NGROUPS_MAX 和RE_DUP_MAX。
  5. 執行時不變值:
名稱 說明 最小可接受值
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
  1. 其他不變值:NL_ARGMAX、NL_MSGMAX 、NL_SETMAX 和NL_TEXTMAX。
  2. 路徑名可變值: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