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