- 论坛徽章:
- 0
|
1. get all
进程的环境是一个以NULL字符结尾的字符串之集合。如:
name=something
Linux系统提供了environ指针来访问其变量内容。
如下程序showenv.c演示了通过environ指针变量访问环境变量:
extern char** environ;
main()
{
char** env=environ;
while(*env)
{
printf("%s\n",*env++);
}
return;
}
2. add
为进程指定新的环境,需:execle()和execve() [in ]
如下程序addenv.c 演示了把新的环境传给上面的showenv.c:
#include
main()
{
char *argv[]={"showenv.x",NULL},
*envp[]={"nick=home","home=nick",NULL};
execve("../exe/showenv.x",argv,envp);
perror("exeve failed");
return;
}
结果:
nick=home
home=nick
其实,Linux系统库stdlib.h提供了putenv(),它完成与addenv同样的工作。方法为:putenv("newvariable=value");如成功返回0。它只改变调用进程的环境变量,父进程不变。
3 get one or find someone
findenv()根据给的name扫描环境内容,找出“name=something”这种形式的字符串。
/*找不到则返回NULL*/
extern char** environ;
char* findenv(char* name)
{
int len;
char *p;
for(p=environ; *p; p++)
{
if( (len=pcmp(name,*p))>=0 && *(*(p+1))=='=' )
return *(p+1+1);
}
return NULL;
}
int pcmp(char* s1,char* s2)
{
int i=0;
while(*s1)
{
i++;
if(*s1++!=*s2++)
return -1;
}
return i;
}
其实,Linux系统库stdlib.h提供了getenv(),它完成与findenv()同样的工作。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/27172/showart_385072.html |
|