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根本就不知道有缓冲区。

Last modification:November 10th, 2019 at 08:20 am