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

28 篇文章 0 订阅

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值