- #include
- char *getenv(const char *name);
- char *secure_getenv(const char *name);
参数name,变量名,例如PATH
返回值,不存在返回空,例如:PATH的值。 例如下面的一长串目录。
csdn@ubuntu:~$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin csdn@ubuntu:~$
- #include
- int setenv(const char *name, const char *value, int overwrite);
如果name不存在,setenv()函数将变量name添加到环境中。如果name在环境中存在,那么如果overwrite非零,则将其值更改为value;如果overwrite为零,则name的值不会改变(并且setenv()返回一个成功状态)。此函数生成按名称和值指向的字符串的副本(与putenv(3)相反)。
NAME
putenv - change or add an environment variableSYNOPSIS
#include int putenv(char *string);
DESCRIPTION
The putenv() function adds or changes the value of environment variables. The argument string is of the form name=value. If name does not already exist in the environment, then string is added to the environment. If name does exist, then the value of name in the environment is changed to value. The string pointed to by string becomes part of the environment, so altering the string changes the environment.RETURN VALUE
The putenv() function returns zero on success, or nonzero if an error occurs. In the event of an error, errno is set to indicate the cause.ERRORS
ENOMEM Insufficient space to allocate new environment.
- #include
- int unsetenv(const char *name);
unsetenv()函数的作用是:从环境中删除变量名。如果环境中不存在name,则函数成功,环境保持不变。
看名字,猜测和unset作用一样,unset是什么?如下所示:先定义一个变量beike,赋值haochi,然后unset beike,然后beike变量的值就变为空了,所以,它可能是删除,也能是被赋值为空吧。
- csdn@ubuntu:~$ beike=haochi
- csdn@ubuntu:~$ echo $beike
- haochi
- csdn@ubuntu:~$ unset beike
- csdn@ubuntu:~$ echo $beike
-
- csdn@ubuntu:~$
它用来把所有的环境变量都删除。别怕,是进程范围内的。
#include <stdlib.h>
int clearenv(void);
DESCRIPTION
The clearenv() function clears the environment of all name-value pairs and sets the value of the external variable environ to NULL.
源码:env.c
- #include
- #include
-
- int main(int argc,char *argv[])
- {
- char *e_val;
- if(argc < 2){
- e_val = "PATH";
- }else{
- e_val = argv[1];
- }
- printf("e_val = %s\n",e_val);
- printf("%s = %s\n",e_val,getenv(e_val));
- return 0;
- }
编译运行:
- csdn@ubuntu:~$ ./a.out
- e_val = PATH
- PATH = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
- csdn@ubuntu:~$
通过实践一的代码实现,首先定义一个自己的环境变量:如下所示,定义了环境hehe,赋值为csdn。
- csdn@ubuntu:~$ export hehe=csdn
- csdn@ubuntu:~$ echo $hehe
- csdn
执行前面的代码,给传递参数hehe
- csdn@ubuntu:~$ ./a.out hehe
- e_val = hehe
- hehe = csdn
- csdn@ubuntu:~$
这样有什么用,可以用保存程序运行的中间结果。
首先定义一个环境变量
- csdn@ubuntu:~$ export hehe=csdn
- csdn@ubuntu:~$ echo $hehe
- csdn
然后在代码中修改它的值,代码如下所示:set_env.c
- #include
- #include
-
- int main(int argc,char *argv[])
- {
- char *e_val;
- if(argc < 2){
- e_val = "PATH";
- }else{
- e_val = argv[1];
- }
- printf("e_val = %s\n",e_val);
- printf("old value:%s = %s\n",e_val,getenv(e_val));
- setenv(e_val,"baidu",1);
- printf("new value:%s = %s\n",e_val,getenv(e_val));
- return 0;
- }
测试结果,如下所示:首先,编译,生成a.out,执行./a.out,输出PATH的值,然后修改PATH的值为baidu,然后测试程序中输出PATH的新值,看到已经修改成功了。程序退出后,在终端中输出PATH的值,发现PATH的值并没有改变,所以进程中的setenv只会修改自己的环境变量副本,并不会修改全局的环境变量,所以可以放心的实验。
- csdn@ubuntu:~$ gcc set_env.c
- csdn@ubuntu:~$ ./a.out
- e_val = PATH
- old value:PATH = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
- new value:PATH = baidu
- csdn@ubuntu:~$ echo $PATH
- /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
- csdn@ubuntu:~$
注意putenv只有一个参数,所以,环境变量名字和值都要放在一个字符中,这个字符串以表达式的形式出现,例如:"PATH=baidu";
首先定义一个环境变量
- csdn@ubuntu:~$ export hehe=csdn
- csdn@ubuntu:~$ echo $hehe
- csdn
然后在代码中修改它的值,代码如下所示:set_env.c
- #include
- #include
-
- int main(int argc,char *argv[])
- {
- char buf[100];
- char *e_val;
- if(argc < 2){
- e_val = "PATH";
- }else{
- e_val = argv[1];
- }
- printf("e_val = %s\n",e_val);
- printf("old value:%s = %s\n",e_val,getenv(e_val));
- sprintf(buf,"%s=%s",e_val,"baidu");
- putenv(buf);
- printf("new value:%s = %s\n",e_val,getenv(e_val));
- return 0;
- }
执行效果:
- csdn@ubuntu:~$ gcc set_env.c
- csdn@ubuntu:~$ ./a.out
- e_val = PATH
- old value:PATH = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
- new value:PATH = baidu
- csdn@ubuntu:~$
使用setenv修改代码如下所示:
- #include
- #include
-
- int main(int argc,char *argv[])
- {
- char *e_val;
- if(argc < 2){
- e_val = "PATH";
- }else{
- e_val = argv[1];
- }
- printf("e_val = %s\n",e_val);
- printf("old value:%s = %s\n",e_val,getenv(e_val));
- clearenv();
- printf("new value:%s = %s\n",e_val,getenv(e_val));
- return 0;
- }
- ~
实验,执行完setenv后,PATH环境变量的值变为null了。
- csdn@ubuntu:~$ ./a.out
- e_val = PATH
- old value:PATH = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
- new value:PATH = (null)
- csdn@ubuntu:~$ echo $PATH
- /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
- csdn@ubuntu:~$