apue对java_[apue] 一个快速确定新系统上各类限制值的工具
對于在不同 Unix 系統之間移植程序,最重要的事情就是確定新系統的一些編譯時、運行時固定或不固定的限制值了。例如文件路徑最大長度 PATH_MAX、進程最大可打開文件句柄數 OPEN_MAX、用戶可加入的附加用戶組最大數量 NGROUPS_MAX、進程命令行參數最大字節數 ARG_MAX、內存頁大小 PAGESIZE、線程棧大小默認值 STACKSIZE、臨時文件最大數量 TMP_MAX 等等。甚至有些系統特征也可以通過查詢來提前確定,例如是否支持讀寫鎖、是否支持異步 IO、是否支持實時信號等等,這樣程序就可以根據系統提供的能力來選擇不同的接口去實現同樣的功能。
回頭來看 apue 第二章有關系統限制與選項這一塊的內容,由于摻雜了 UNIX 標準化的內容,顯得很沒有條理,例如將各種限制按標準劃分為:
ISO C
編譯時限制 (頭文件常量)
POSIX
不變的最小值 (聲明遵循 POSIX 的系統必需支持到至少這么多,不能再小了)
不變值 (SSIZE_MAX)
運行時可增加的值
運行時不變的值
路徑名可變值
XSI
不變的最小值 (同上)
數值限制
運行時不變值
看得人一頭霧水,其實如果拋開標準,單按限制的性質來分,就比較簡單啦:
編譯時限制 (通過頭文件常量)
運行時限制
不與文件系統相關部分(通過 sysconf)
與文件系統相關部分(通過 pathconf)
也就是說,要確定一個系統限制,一共分兩步:
確定相應的符號常量有沒有在頭文件定義,如果有,直接拿來用;
如果沒有,走 sysconf 或 pathconf 查詢。
對于系統選項,稍等復雜一點,分三步:
符號常量定義為 -1,平臺不支持該選項;
符號常量定義大于 0,平臺支持相應的選項;
符號常量定義為 0,需要進一步依靠 sysconf 或 pathconf 來查詢。
到這里,你大概已經想到怎么自己制作一個工具了,那就是按上面的邏輯 coding 唄,可以把想要查的常量作為輸入,查到的結果打印到控制臺,為方便工具靈活的處理各種不同輸入,常量可以作為命令行參數輸入,就像下面這樣:
未完待續……
總結
以上是生活随笔為你收集整理的apue对java_[apue] 一个快速确定新系统上各类限制值的工具的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 京东app怎么绑定礼品卡
- 下一篇: iOS 13 教程:如何从 iPhone