https://blog.csdn.net/zxh2075/article/details/78271312
https://blog.csdn.net/jiangyanting2011/article/details/78875928
1. 基本概念
环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数。
环境变量通常具有某些特殊用途,还通常在系统当中具有全局性。
2. 常见环境变量
- PATH:指定命令的搜索路径
- HOME:当前用户的主目录
- SHELL:当前的Shell
3. 查看环境变量的方法
ehco $NAME
NAME即为环境变量的名称
4.环境变量相关的命令
- echo:显示某个环境变量的值
- export:将某个普通变量设置为环境变量(有关普通变量与环境变量可以看这篇博客 )
- env:显示所有环境变量
- unset:清除环境变量
- set:显示所有普通变量与环境变量
4. 通过代码获取环境变量
命令行第三个参数
通过一个全局变量
通过系统调用
5. 通过代码改变环境变量
putenv() 函数向调用进程的环境中添加一个新变量,或者修改一个已经存在的变量值。
#include <stdlib.h>
int putenv(char* string);
参数string是一个形如 name=value的字符串,若当前的环境中name已经存在,则将value替换,如果name不存在则新建一条环境变量。这个函数最大的限制是,会直接修改环境中对应指针的指向,也就是如果原来存在name,在函数调用后name这条环境变量指针将指向string,所以要注意string最好用字符串常量而不是字符数组,因为函数返回后栈区数据很可能被修改。
setenv() 函数可以代替putenv() 函数,向环境中添加一个变量。
#include <stdlib.h>
int setenv(const char *name, const char *value, int overwrite);
setenv() 函数将name和value的值复制到内存中一块缓冲区并保存为形如name=value的形式,并在环境列表中加上这一条,如果name已经存在且overwrite为0则什么都不做,overwrite为1则覆盖。因为这个函数会把name=value拷贝到内存上的缓冲区,所以不用担心修改原name和value会对环境变量产生什么影响。
unsetenv() 用来移除由name标识的环境变量。
#include <stdlib.h>
int unsetenv(const char *name);
清空环境变量可以直接让 environ = NULL,这也是清空环境变量的库函数 clearenv 的工作内容。但用setenv设置环境变量然后用这种方法清空环境变量可能会导致内存泄漏,因为并没有释放setenv申请的缓冲区,因为clearenv根本就不知道有缓冲区。