码迷,mamicode.com
首页 > 其他好文 > 详细

getenv和putenv在获取和设置环境变量中的使用

时间:2015-06-26 17:56:31      阅读:263      评论:0      收藏:0      [点我收藏+]

标签:

 1 #include <stdlib.h>
 2 #include <stdio.h>
 3 #include <string.h>
 4 /*
 5 这个函数是对环境变量进行一些操作的
 6 */
 7 int main(int argc, char * argv[])        //主函数
 8 {
 9     char * var, * value;        //定义两个字符串指针变量var和value
10     
11     if (argc==1||argc>3)        //要是没有参数输入和有两个以上的参数输入的话
12     {                //进入循环体,打印一句话,然后退出
13         fprintf(stderr,"usage: environ var [value]\n");
14         exit(1);
15     }
16     
17     var=argv[1];            //否则就是有参数输入,将第一个参数赋值给var
18     value=getenv(var);    //调用函数getenv获得与该var相关的值,要是没有的话返回null
19     if(value)
20         printf("Variable %s has value %s\n", var, value);//有的话打印对应关系
21     else
22         printf("Variable %s has no value\n", var);
23         
24     if(argc==3)            //如果输入参数有两个的话
25     {
26         char * string;        //首先定义一个字符串指针变量string
27         value=argv[2];        //将第二个参数赋值给value
28         string=malloc(strlen(var)+strlen(value)+2);//分配指定字节的存储区
29         if(!string)//成功的话返回非空指针出错的话返回null,
30         {
31             fprintf(stderr, "Out of memory\n");//出错处理,打印到标准错误
32             exit(1);
33         }
34         strcpy(string, var);//把var的内容复制到string开始的地方
35         strcat(string,"=");//字符串拼接,结果放在string中
36         strcat(string,value);//字符串拼接,结果放在string指向的地址中
37         printf("Calling putenv with: %s\n", string);//输出一句话
38         if(putenv(string)!=0)//将这个等式为参数放到环境变量中
39         {//失败的话返回-1
40             fprintf(stderr,"puterr failed\n");
41             free(string);
42             exit(1);
43         }
44         value=getenv(var);//成功的话执行这句,获取第一个参数的环境变量
45         if(value)//成功的话返回相应的值
46             printf("New value of %s is %s\n",var, value);//打印一句话
47         else
48             printf("New value of %s is null??\n",var);
49     }
50     exit(0);
51 }

 

下面是实验操作

 1 jason@t61:~/桌面$ gcc environ.c
 2 jason@t61:~/桌面$ ./a.out 
 3 usage: environ var [value]
 4 jason@t61:~/桌面$ ./a.out HOME
 5 Variable HOME has value /home/jason
 6 jason@t61:~/桌面$ ./a.out FRED
 7 Variable FRED has no value
 8 jason@t61:~/桌面$ ./a.out FRED hello
 9 Variable FRED has no value
10 Calling putenv with: FRED=hello
11 New value of FRED is hello
12 jason@t61:~/桌面$ ./a.out 123 456 789
13 usage: environ var [value]

 下面是进一步的实验

1 jason@t61:~/桌面$ ./a.out FRED
2 Variable FRED has no value
3 jason@t61:~/桌面$ FRED=hello ./a.out FRED
4 Variable FRED has value hello

可以看出,环境变量仅在程序中有效,不会反映到父进程,也就是我们的shell中

第3行的情况是说,行首的赋值是对环境变量的临时的改变,使得程序运行在一个FRED有赋值的环境中

all in all:

shell中设置的环境变量会成为一个全局变量,是正儿八经的双刃剑

getenv和putenv在获取和设置环境变量中的使用

标签:

原文地址:http://www.cnblogs.com/kongchung/p/4602818.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!