1 环境变量的获取和设置
环境变量是一些能用来控制shell脚本和其它程序行为的变量,可用它们配置当前用户的运行环境,可以用set
命令来列出所有的环境变量,还可用echo $HOME
来列出具体变量名对应的值。
#include <stdlib.h>
char* getenv(const char* name);
int putenv(const char* string);
环境变量由一组格式为“名字=值”的字符串组成。
切记设置的环境变量仅对本程序有效,在程序中做的改变不会反应到外部环境中,因为变量的值不会从子进程(本程序)传播到父进程(shell程序)。环境变量就像全局变量一样,可能会对程序的行为造成较大影响。
getenv函数以给定的名字搜索环境中的一个字符串,并返回与该名字相关的值,返回的字符串存储在getenv提供的静态空间中,进一步使用需要用strcmp复制。不存在时返回NULL。
putenv函数以格式为“名字=值”的字符串作为参数,将该字符串加到当前环境中,失败时返回-1并设置error,成功时返回0。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(int argc,char* argv[ ])
{
char* var,*value;
if(argc == 1 || argc > 3)
{
printf("environ error\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 no value\n",var);
if(argc == 3)
{
value = argv[2];
char* string = (char*)malloc(strlen(value) + strlen(var) + 2);
if(!string)
{
printf("string malloc fail\n");
exit(1);
}
strcpy(string,var);
strcat(string,"=");
strcat(string,value);
if(putenv(string) != 0)
{
printf("putenv fail\n");
free(string);
exit(1);
}
else
printf("Variable %s has been set to %s\n",var,value);
value = getenv(var);
if(value)
printf("get new var %s is %s\n",var,value);
else
printf("getenv error?????\n");
}
exit(0);
}
#include <stdlib.h>
extern char* environ[];
environ是一个外部变量字符串数组(以NULL结尾),利用这个变量可以直接访问这个字符串数组。
#include <stdlib.h>
#include <stdio.h>
extern char** environ;
int main()
{
char** env = environ;
while(*env)
{
printf("%s\n",*env);
env++;
}
exit(0);
}