-
环境表
每个程序都有一张环境表。与参数表一样,环境表也是一个字符指针数组,其中每个指针包含一个以null结束的c字符串地址。
全局变量environ则包含了该指针数组的地址:extern char ** environ;
如下程序可以打印环境表。
#include <stdio.h>
#include <stdlib.h>
extern char ** environ;
int main()
{
int i;
for(i=0;environ[i]!=NULL;i++)
{
puts(environ[i]);
}
exit(0);
}
环境表中的环境变量的值大多数预定义为全大写字母。
在历史上,大多数UNIX系统支持main函数带三个参数:
int main(int argc,char ** argv,char ** envp[]);
其中的第三个参数就是环境表。
POSIX.1规定应该使用environ而不使用第三个参数。
通常使用getnev和putenv来访问特定的环境变量,而不是environ变量。如果要查看整个环境,还是只能使用environ指针。
-
getenv
-
setenv、unsetenv
-
函数定义
#include <stdlib.h> int setenv(const char *name, const char *value, int overwrite); int unsetenv(const char *name);
-
功能描述
- setenv修改或者增加环境变量。如果环境中没有name环境变量,则setnev增加该环境变量,并把值设为value。如果有该环境变量,则根据overwrite的值来决定。overwrite为非0值,则覆盖之前的;overwrite为0,则不覆盖。
- 如果要覆盖,则setenv会释放原来该name字段存放的空间,再重新分配空间,把value存储进去。
- unsetenv删除环境表中的name字段。如果没有该字段,也执行成功,只是环境表没有变化。
-
返回值
- setenv:执行成功,返回0;如果环境表空间不足,返回-1。
- unsetenv:执行成功,返回0;失败返回-1,并设置errno。
-
-
putenv
#include <stdlib.h> int putenv(char *string);
- 可以注意到putenv的变量没有const修饰,而getenv、setenv、unsetenv都有const修饰,所以putenv不太安全,一般不使用。