环境变量简述
UNIX规范为各种应用定义了许多标准环境变量,包括终端类型、默认的编辑器、时区等。C语言程序可以通过putenv和getenv函数来访问环境变量
#include <stdlib.h> char *getenv(const char *name); int putenv(const char *string);
环境由一组格式为"名字=值"的字符串组成.getenv函数以给定的名字搜索环境中的一个字符串,并返回与该名字相关的值。如果请求的变量不存在,它就返回null。如果变量存在但无关联值,它将运行成功并返回一个空字符串,即该字符串的第一个字节是null。由于getenv返回的字符串是存储在getenv提供的静态空间中,所以如果想进一步使用它,你就必须将它复制到另一个字符串中,以免它被后续的getenv所覆盖
putenv函数以一个格式为"名字=值"的字符串作为参数,并将该字符串加到当前环境中。如果由于可用内存不足而不能扩展环境,它会失败并返回-1.此时错误变量errno将被设置为ENOMEM
getenv和setenv
紧接在main函数声明后的几行代码用于确保程序environ.c被正确调用,它只带有一个或两个参数:
#include <stdlib.h> #include <stdio.h> #include <string.h> int main(int argc,char *argv[]) { char *var, *value; if(argc == 1 || argc > 3){ fprintf(stderr,"usage:environ var [value]\n"); exit(1); } var = argv[1]; value = getenv(var); if(value) printf("Variable %s has value %s\n",var ,value); else printf("Variable %s has not value\n",var); if(argc == 3){ char *string; value = argv[2]; string = malloc(strlen(var)+strlen(value)+2); if(!string){ fprintf(stderr,"out of memory\n"); exit(1); } strcpy(string,var); strcat(string," ="); strcat(string,value); printf("Calling putenv with:%s\n",string); if(putenv(string) !=0){ fprintf(stderr," putenv failed\n"); free(string); exit(1); } value = getenv(var); if(value) printf("New value of %s is%s\n",var,value); else printf("New value of %s is null??\n",var); } exit(0); }