标签:
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中设置的环境变量会成为一个全局变量,是正儿八经的双刃剑
标签:
原文地址:http://www.cnblogs.com/kongchung/p/4602818.html