Linux 环境变量
我们知道,Linux下的环境变量可以用来控制shell脚本和其他程序的行为。UNIX规范定义了许多标准环境变量,包括终端类型、默认的编辑器、时区等。
C语言程序可以通过putenv和getenv函数来访问环境变量。
1 #include<stdlib.h> 2 extern char **environ; 3 char *getenv(const char *name); 4 int putenv(const char *string);
环境由一组格式为“名字=值”的字符串组成。程序可以通过environ这个变量直接访问这个字符串数组。
getenv函数根据给定的名字搜索环境中的一个字符串,并返回与名字相关的值。这里需要注意的是getenv返回的字符串存储在getenv提供的静态空间中,如果想进一步使用,就必须将它复制到另一个字符串中,以免被后面的getenv的调用覆盖。
putenv函数以一个格式为“名字=值”的字符串作为参数,并将该字符串加到当前环境中。
对于以上函数及变量,举例编程如下:
1 #include<stdlib.h> 2 #include<stdio.h> 3 #include<string.h> 4 extern char **environ; 5 int main(int argc,char *argv[]) 6 { 7 char *var, *value; 8 if(argc > 3){ 9 fprintf(stderr,"usage: environ var [value]\n"); 10 exit(1); 11 } 12 //没有参数的情况,遍历environ变量,打印整个环境 13 if(argc == 1){ 14 char **env = environ; 15 while(*env){ 16 printf("%s\n",*env); 17 env ++; 18 } 19 exit(0); 20 } 21 //调用getenv从环境中取出变量的值 22 var = argv[1]; 23 value = getenv(var); 24 if(value) 25 printf("Variable %s has value %s\n",var,value); 26 else 27 printf("Variable %s has no value\n",var); 28 //判断程序是否有第二个参数,有构造一个格式为"名字=值"的字符串并调用putenv来设置变量的值 29 if(argc == 3){ //程序本身就是第一个参数 30 char *string; 31 value = argv[2]; 32 string = malloc(strlen(var) + strlen(value) + 2); //加2是因为"="和"\0" 33 if(!string){ 34 fprintf(stderr,"out of memory\n"); 35 exit(1); 36 } 37 strcpy(string,var); 38 strcat(string,"="); 39 strcat(string,value); 40 if(putenv(string) != 0){ 41 fprintf(stderr,"putenv failed\n"); 42 free(string); 43 exit(1); 44 } 45 //再次调用getenv查看修改后变量的值 46 value = getenv(var); 47 if(value) 48 printf("New value of %s is %s\n",var,value); 49 else 50 printf("New value of %s is null??\n",var); 51 } 52 exit(0); 53 }
测试结果如下如所示:


(部分截图)
浙公网安备 33010602011771号