环境变量(p49)
在操作系统中用来指定操作系统运行环境的一些参数本质:字符串格式:名=值[:值],多个值用:号隔开值用来描述进程环境信息存储形式:char*[]数组,数组名:environ,内部存储字符串,NULL结尾引入环境变量表:声明环境变量:extern char**environ;PATH变量中保存了可执行文件的搜索路径,使用“:”隔开解释当前所使用的命令解释器:echo $SHELL查看家目录:echo $HOME查看所使用的语言:echo $LANG
在命令终端访问环境变量:
查看:echo $变量名定义:变量名=变量值删除:unset 变量名
在c语言中:
获取环境变量:
#include<stdlib.h>
char *getenv(const char* name
);
成功:返回一个指向环境变量的指针,失败:返回
NULL
改变或增加一个环境变量:
int setenv(const char* name
,const char*value
,int overwrite
);
overwrite:
0时不覆盖,非
0时覆盖
成功:返回
0,失败:返回
-1
改变或增加环境变量:
int putenv(char*string
);
string
:要改变或增加的环境变量表达式
成功:返回
0,失败:返回
-1
删除一个环境变量:
void unsetenv(const char*name
);
注意:无此name时不会报错,不符合命名规则时报错
成功:返回
0,失败:返回
-1
代码1:遍历当前进程的环境变量
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
extern char **environ
;
int main()
{
for(int i
= 0;environ
[i
] != NULL;i
++)
{
printf("environ[%d] = %s\n",i
,environ
[i
]);
}
return 0;
}
代码2:获取环境变量,创建环境变量
#include<stdio.h>
#include<stdlib.h>
int main()
{
const char *name
= "USER";
char *get
= getenv(name
);
if(get
!= NULL)
{
printf("getenv = %s\n",get
);
}
else
{
printf("没有环境变量\n");
}
const char *name1
= "creat_env";
int set
= setenv(name1
,"zjl-xwa",1);
if(set
== 0)
{
printf("环境变量创建成功\n");
}
else
{
printf("环境变量创建失败!!!\n");
}
char *getname
= getenv(name1
);
if(getname
!= NULL)
{
printf("新的环境变量是 : %s\n",getname
);
}
else
{
printf("没有环境变量\n");
}
int del_env
= unsetenv(name1
);
{
if(del_env
== 0)
{
printf("%s:变量删除成功\n",name1
);
}
else
{
printf("%s:变量删除失败\n",name1
);
}
}
}