按照慣例,環(huán)境變量字符串都是name=value這樣的形式,大多數(shù)name由大寫字母加下劃線組成,一般把name的部分叫做環(huán)境變量,value的部分則是環(huán)境變量的值。環(huán)境變量定義了進(jìn)程的運(yùn)行環(huán)境,一些比較重要的環(huán)境變量的含義如下:
可執(zhí)行文件的搜索路徑。ls命令也是一個(gè)程序,執(zhí)行它不需要提供完整的路徑名/bin/ls,然而通常我們執(zhí)行當(dāng)前目錄下的程序a.out卻需要提供完整的路徑名./a.out,這是因?yàn)镻ATH環(huán)境變量的值里面包含了ls命令所在的目錄/bin,卻不包含a.out所在的目錄。PATH環(huán)境變量的值可以包含多個(gè)目錄,用:號(hào)隔開。在Shell中用echo命令可以查看這個(gè)環(huán)境變量的值:
$ echo $PATH 用來描述shell命令的環(huán)境變量
#include <stdio.h>extern char** environ;//引入環(huán)境變量表必須聲明環(huán)境變量int main(void){ int i=0; for(i=0;environ[i];i++) { PRintf("%s/n",environ[i]); } return 0;}上面這個(gè)程序編程實(shí)現(xiàn)了打印當(dāng)前程序的環(huán)境變量。SHELL
當(dāng)前Shell,它的值通常是/bin/bash。
TERM
當(dāng)前終端類型,在圖形界面終端下它的值通常是xterm,終端類型決定了一些程序的輸出顯示方式,比如圖形界面終端可以顯示漢字,而字符終端一般不行。
LANG
語言和locale,決定了字符編碼以及時(shí)間、貨幣等信息的顯示格式。
HOME
當(dāng)前用戶主目錄的路徑,很多程序需要在主目錄下保存配置文件,使得每個(gè)用戶在運(yùn)行該程序時(shí)都有自己的一套配置。
getenv函數(shù)
獲取環(huán)境變量值
char *getenv(const char *name); 成功:返回環(huán)境變量的值;失敗:NULL (name不存在)
setenv函數(shù)
設(shè)置環(huán)境變量的值
int setenv(const char *name, const char *value, int overwrite); 成功:0;失敗:-1
參數(shù)overwrite取值: 1:覆蓋原環(huán)境變量
0:不覆蓋。(該參數(shù)常用于設(shè)置新環(huán)境變量,如:ABC = haha-day-night)
unsetenv函數(shù)
刪除環(huán)境變量name的定義
int unsetenv(const char *name); 成功:0;失敗:-1
注意事項(xiàng):name不存在仍返回0(成功),當(dāng)name命名為"ABC="時(shí)則會(huì)出錯(cuò)。
寫了一段測試代碼來熟悉上面函數(shù)的函數(shù)。
#include <unistd.h>int main(void){ char* val; const char* name="ABC"; val=getenv(name); printf("1.%s=%s/n",name,val); setenv(name,"haha-woshihazida-haha",1); val=getenv(name); printf("2.%s=%s/n",name,val); #if 0 int ret=unsetenv("ABCDEFGH); printf("1.ret=%d/n",ret); val=getenv(name); printf("3.%s=%s",name,val); #else int ret=unsetenv("haha-woshihazida-haha"); printf("2.%d/n",ret); val=getenv(name); printf("3.%s=%s",name,val); #endif printf("/0"); return 0;}
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注