getenv,putenv,setenv,export函数


getenv

通常环境变量是通过 name=value 的形式给出的,使用 environ 指针打印出的所有的环境变量的形式就是如此。使用 getenv 函数可以通过给出 name 来获得 value 的值。

函数原型:

char * getenv(const char *name);

函数参数:

  • name:想要获取的环境变量名

返回值:

  • 调用成功返回指向 value 的指针
  • 调用失败返回 NULL

getenv,putenv,setenv,export函数 

运行后可得:

getenv,putenv,setenv,export函数

我们可以看到第一行打印的是环境变量PATH的内容,而第二行是SHELL的内容。 


putenv

putenv 函数用来向环境表中 添加或者修改 环境变量。

函数原型:

int putenv(char * string);

函数参数:

  • string:指向环境变量的指针,其中环境变量必须以 "name=value" 的形式给出

返回值:

  • 调用成功返回 0
  • 调用失败时返回 非0 值

如果环境表中没有 name 这个环境变量,则添加该环境变量;如果环境表中已经有了name这个环境变量,则先删除之前的 value,再修改为新的 value。


setenv

setenv 函数和putenv 函数功能类似,可以用来 添加或修改 环境变量。

函数原型:

int setenv(const char *name, const char *value, int overwrite);

函数参数:

  • name:环境变量名
  • value:环境变量值
  • overwrite:重写选项,当 name 在环境表中存在时,如果 overwrite 的值为 0 ,则不修改name的值;如果 overwrite 的值为 非0,则修改name的值;如果没有此环境变量,则无论overwrite为何值均添加此环境变量。

通过此函数并不能添加或修改 shell 进程的环境变量,或者说通过setenv函数设置的环境变量只在本进程,而且是本次执行中有效。如果在某一次运行程序时执行了setenv函数,进程终止后再次运行该程序,上次的设置是无效的,上次设置的环境变量是不能读到的。 

返回值:

  • 调用成功返回 0
  • 调用失败时返回 非0

putenv 函数和 setenv 函数虽然功能类似,但是这两个函数在实现方面还是有区别的,区别如下:

putenv函数:

  • putenv 函数会将参数 string 直接填写到环境表中,不会再为 "name=value" 这个字符串再去分配内存。如果是在一个函数中定义的string,那么在调用该函数后,string 指向的内容可能会被释放,就找不到name环境变量的值了。

setenv 函数:

  • setenv 函数和 putenv 函数不同,它会将name和value指向的内容复制一份并为其分配内存,形成 "name=value" 的字符串,并将其地址写入到环境表中。所以就不会出现上面putenv 的情况,就算函数返回了,name 和 value指向的内容被释放了,仍然有一份拷贝在。

 


Linux中的命令:setenv

Linux中的功能:查询或显示环境变量

语法:setenv [变量名称] [变量值]


export

Linux中的功能:设置或显示环境变量

说明:在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅及于该次登陆操作。

语法:export [-fnp] [变量名称] = [变量设置值]

参数说明:

-f 代表[变量名称]中为函数名称。

-n 删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。

-p 列出所有的shell赋予程序的环境变量。

getenv,putenv,setenv,export函数

此时通过env命令来查看我们的环境变量,可以发现环境变量中多了一个叫做MYENV 的变量

getenv,putenv,setenv,export函数

注意图中的高亮是我自己加上去以方便大家能够找到的。

 也可以用getenv汉化来获得我们写的MYENV环境变量

printf("%s\n",getenv("MYENV"));

我们执行下面这条命令即可删除这个环境变量

unset MYENV