进程环境之环境表
每個程序都會接收到一張環境表。與參數表一樣,環境表也是一個字符指針數組,其中每個指針包含一個以null結束的C字符串的地址。全局變量environ則包含了該指針數組的地址:
extern char **environ; 要在程序中使用全局變量environ時,需要用該語句作變量聲明。extern指示environ在其他文件中已定義,要在本文件中使用。例如,如果該環境包含5個字符串,那么它看起來可能如圖7-2所示。其中,每個字符串的結尾處都顯示地有一個null字符。我們稱environ為環境指針(environment pointer),指針數組為環境表,其中各指針指向的字符串為環境字符串。
按照慣例,環境由
name=value
這樣的字符串組成,這與圖7-2中所示相同。大多數預定義的名字完全由大寫字母組成,但這只是一個慣例。
?
在歷史上,大多數UNIX系統支持main函數帶有三個參數,其中第三個參數就是環境表的地址:
int main( int argc, char *argv[], char *envp[] );
因為ISO C規定main函數只有兩個參數,而且第三個參數與全局變量environ相比也沒有帶來更多益處,所以POSIX.1也規定應使用environ而不使用第三個參數。
通常用getenv和putenv函數來訪問特定的環境變量,而不是用environ變量。但是,如果要查看整個環境,則必須使用environ指針。
?
本篇博文內容摘自《UNIX環境高級編程》(第二版),僅作個人學習記錄所用。關于本書可參考:http://www.apuebook.com/。
轉載于:https://www.cnblogs.com/nufangrensheng/p/3507968.html
總結