C语言通过putenv和getenv函数来访问环境变量。
#include<stdlib.h>
char *getenv(const char *name);
int putenv(const char *string);
环境是由一组格式为“名字=值”的字符串组成。
getenv函数以给定的名字搜索环境中的一个字符串,并返回与该名字相关的值。如果请求不存在,就返回NULL。
由于getenv返回的字符串存储在静态空间,所以想进一步利用它,就必须拷贝出来。
// 1 The first few lines after the declaration of main ensure that the program, environ.c, has been called correctly.
#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);
}
// 2 That done, we fetch the value of the variable from the environment, using getenv.
var = argv[1];
value = getenv(var);
if(value)
printf("Variable %s has value %s\n", var, value);
else
printf("Variable %s has no value\n", var);
// 3 Next, we check whether the program was called with a second argument. If it was, we set the variable to the value of that argument by constructing a string of the form name=value and then calling putenv.
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);
}
// 4 Finally, we discover the new value of the variable by calling getenv once again.
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);
}
./environ HOME
Variable HOME has value /home/zq
./environ qq
Varliable qq has no value
./environ zq qq
Varliable zq has no value
Calling putenv with: zq=qq
New value of zq is qq
./environ zq
Varliable zq has no value