环境表

每一个程序都会接收到一张环境表,与参数表一样,环境表也是一个字符指针数组,其中每个指针包含一个以null结束的C字符串的地址。全局变量environ包含了该指针数组的地址:

extern char **environ;

我们称environ为环境指针。环境由name=value这样的键值对组成,大多数预定义的名字完全由大写字母组成,但这只是一个惯例。

 

ISO C定义了一个函数getenv,可以用其取环境变量

1 #include <stdlib.h>
2 
3 //返回值:指向与name关联的value的指针,若未找到则返回NULL
4 char* getenv(const char* name);

我们应当使用上面的函数从环境中取一个指定环境变量的值,而不是直接访问environ。

 

我们还可以设置环境变量,可能希望改变现有变量的值,或者增加新的环境变量。

 1 #include <stdlib.h>
 2 
 3 //取形式为name=value的字符串,将其放到环境表中。如果name已存在,则先删除原来的定义
 4 //返回值:若成功则返回0,若出错则返回非0值
 5 int putenv(char *str);
 6 
 7 //返回值:若成功则返回0,若出错则返回-1
 8 /*将name设置为value,如果环境中name已存在,那么如果rewrite非0,则先删除其定义,否则不删除其现有定义*/
 9 int setenv(const char* name,const char* value,int rewrite);
10 
11 //删除name的定义,即使不存在这种定义也不算出错
12 int unsetenv(const char* name);

putenv和setenv的区别是,后者必须分配存储区,前者无需将传送给他的参数字符串直接放到环境中,而只是放入指针。

 

 

posted @ 2012-06-14 15:29  Cavia  阅读(344)  评论(0编辑  收藏  举报