现在的位置: 首页 > 综合 > 正文

Unix进程环境之3—进程环境列表

2013年03月23日 ⁄ 综合 ⁄ 共 1616字 ⁄ 字号 评论关闭


1:进程环境

简介当一个进程(proecss)

调用另一个程序

(program)

时,同时会传递这个程序执行的环境列表

(environment list)

进程环境列表是一个字符指针数组,每个字符指针是一个以空字符(null-terminated)

结束的

C

字符串。

字符指针数组地址包含在全局变量environ

里。如下:

extern char **environ;

加入环境包含五个字符串,则表示为以下图示:

通常环境列表有名称---

值对组成,名称为大写,大写只是约定的惯例。

要访问特定的环境变量不用environ

指针,通常通过函数

getenv

 和 

putenv

来访问。但是要访问整个环境变量就要用到environ

指针了。

2:进程环境操作函数

ISO C定义了一个函数可以用来取得环境列表值,前提是这个列表值要提前定义好。函数的头文件及函数原型为:

#include <stdlib.h>

char *getenv(const char *name);

Returns: pointer to value associated with name, NULL if not found

要去的特定的环境列表,用getenv

直接返回结果。比如,取得登录用户名为:

char * user = getenv("LOGNAME"); user 保存登录用户名。

3:以下是取得环境变量的例子:

   程序中所用到的环境变量值由Single UNIX

所定义,程序在

ubuntu10.4

上执行,所以有些值为空。


4:操作环境变量:

以下函数可以操作环境变量值:getenv

putenv

setenv

unsetenv

clearenv

Linux

系统支持这

5

个函数,其他的

Unix

系统不全支持。

clearenv 不是 

Single UNIX 

规范

用来从

environment list

移除所有的值

.

 

函数头文件及原型如下:

#include <stdlib.h>

int putenv(char *str);

int setenv(const char *name, const char *value, int rewrite);

int unsetenv(const char *name);

All return: 0 if OK, nonzero on error

注意:

1:对于

setenv

函数,如果名称存在有以下两种情况:

A:

 rewrit

0

,存在的名称将会被移除。

B:

 rewrit

0

,为存在的名称更新值。

2

unsetenv 

函数用来移除特定的环境值。

3

putenv 

setenv

的差别。

setenv为环境列表参数分配内存来生成新的名称

---

值对字符串。

putenv 用新的值字符串地址来替换原来的地址。因此,在

Linux 

Solaris

上,

putenv

函数用新的字符串地址来替换原来的地址,所以不能用分配在栈上的字符串地址。因为栈地址在函数返回时会重新利用,导致赋值错误。

抱歉!评论已关闭.