每個(gè)程序中都維護(hù)一個(gè)指向環(huán)境變量的指針char **environ;
子進(jìn)程會(huì)從父進(jìn)程繼承環(huán)境變量。子進(jìn)程環(huán)境變量的修改不一定會(huì)影響父進(jìn)程
無關(guān)的多個(gè)進(jìn)程之間修改環(huán)境變量不會(huì)互相影響
打印環(huán)境變量
[c]
#include
extern char **environ;
int main()
{
while(*environ)
{
printf("%s
",*environ++);
}
return 0;
}
[/c]
查詢環(huán)境變量
多數(shù)時(shí)候,只是查看一個(gè)環(huán)境變量的值??梢允褂?char * getenv(const char *name);函數(shù)
[c]
#include
#include
int main()
{
char *path=getenv("PATH");
printf("path=%s
",path);
return 0;
}
[/c]
這個(gè)和shell中用echo $PATH打印出來的效果是一樣的
設(shè)置環(huán)境變量
putenv
定義函數(shù) int putenv(const char * string);
表頭文件 #include
函數(shù)說明 putenv()用來改變或增加環(huán)境變量的內(nèi)容。
參數(shù) string的格式為name=value,如果該環(huán)境變量原先存在,則變量?jī)?nèi)容會(huì)依參數(shù)string改變,否則此參數(shù)內(nèi)容會(huì)成為新的環(huán)境變量。
[c]
#include
#include
int main()
{
char *HELLO;
putenv("HELLO=hello");
HELLO=getenv("HELLO");
printf("HELLO=%s
",HELLO);
return 0;
}
[/c]
修改環(huán)境變量
*修改PATH環(huán)境變量加上HOME目錄,把修改后的環(huán)境變量打印出來。
[c]
#include
#include
#include
int main()
{
char *path=getenv("PATH");
char *home=getenv("HOME");
int n=strlen(path)+strlen(home);
char *str=malloc(n+2);
sprintf(str,"%s:%s",home,path);
printf("str=%s
",str);
setenv("PATH",str,1);
path=getenv("PATH");
printf("new path=%s
",path);
free(str);
return 0;
}
[/c]
setenv與putenv區(qū)別
函數(shù)定義:int putenv(const char * string);
putenv()用來改變或增加環(huán)境變量的內(nèi)容。
參數(shù)string的格式為name=value,如果該環(huán)境變量原先存在,則變量?jī)?nèi)容會(huì)依參數(shù)string改變,否則此參數(shù)內(nèi)容會(huì)成為新的環(huán)境變量。
返回值:執(zhí)行成功則返回0,有錯(cuò)誤發(fā)生則返回-1。
函數(shù)定義:int setenv(const char *name,const char * value,int overwrite);
setenv()用來改變或增加環(huán)境變量的內(nèi)容。參數(shù)name為環(huán)境變量名稱字符串。
參數(shù)value則為變量?jī)?nèi)容,參數(shù)overwrite用來決定是否要改變已存在的環(huán)境變量。如果overwrite不為0,而該環(huán)境變量原已有內(nèi)容,則原內(nèi)容會(huì)被改為參數(shù)value所指的變量?jī)?nèi)容。如果overwrite為0,且該環(huán)境變量已有內(nèi)容,則參數(shù)value會(huì)被忽略。
返回值:執(zhí)行成功則返回0,有錯(cuò)誤發(fā)生時(shí)返回-1。
當(dāng)前題目:UC編程:環(huán)境變量的查詢與修改-創(chuàng)新互聯(lián)
文章起源:http://weahome.cn/article/dhdpjg.html