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 }

测试结果如下如所示:

(部分截图)

 

posted on 2013-04-22 16:41  Licious  阅读(200)  评论(0)    收藏  举报