《unix高级环境编程》进程环境——环境变量

环境表

          每个程序都会对应一张环境表,环境表是一个字符指针数组,其中每个指针包含一个以null结束的C字符串地址。全局变量environ包含了 该指针数组的地址: extern char **environ; 下图是环境表,包含3个C字符串,每个字符串结尾都显式的有一个null字符。


环境变量

        环境字符串一般表示如下:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. name = value;//环境变量名,环境变量值  
        以下根据对环境变量不同的操作得到不同的结果,包括获取环境变量当前值,添加环境变量,修改环境变量和删除环境变量;相对应的函数分别为getenv、putenv、setenv和unsetenv函数,具体实现功能和返回值如下:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. /* 
  2.  * 函数功能:获取环境变量值;  
  3.  * 返回值:指向与name关联的value的指针,若未找到则返回NULL;  
  4.  * 函数原型: 
  5.  */  
  6.  #include <stdlib.h>  
  7.  char *getenv(const char *name);    
  8. /* 
  9.  * 函数功能:增加环境变量;   
  10.  * 返回值:若成功则返回0,若出错则返回非0;   
  11.  * 函数原型:   
  12.  */    
  13.  #include <stdlib.h>    
  14.  int putenv(char *str);    
  15. /* 说明: 
  16.  * 把name = value的字符串存放在环境表中,如果name已存在,则先删除其原来的定义;   
  17.  */    
  18.  /*  
  19.  * 函数功能:修改环境变量;  
  20.  * 返回值:若成功则返回0,若出错则返回-1;  
  21.  * 函数原型:  
  22.  */    
  23.  #include <stdlib.h>    
  24.  int setenv(const char *name, const char *value, int rewrite);    
  25.  int unsetenv(const char *name);    
  26. /* 说明: 
  27.  * setenv将name设置为value值,若name已经存在,当rewrite为非0时,先删除其现有定义;   
  28.  * 若rewrite为0,则不删除其现有定义,即不修改name的字符变量;   
  29.  *  
  30.  * unsetenv删除name的定义; 
  31.  *  
  32.  */   

测试程序:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #include <stdlib.h>  
  2. #include <stdio.h>  
  3. #include "apue.h"  
  4.   
  5. int main(void)  
  6. {  
  7.     char *ptr;  
  8.     int temp;  
  9.   
  10.     if((ptr = getenv("USER")) == NULL)  
  11.         err_sys("get environment error.\n");  
  12.     printf("getnev: USER = %s.\n",ptr);  
  13.   
  14.     temp = putenv("linux=linux3.8");  
  15.     if(0 == temp)  
  16.         printf("After putenv: linux= %s.\n",getenv("linux"));  
  17.   
  18.     temp = setenv("linux","hellow linux",0);  
  19.     if(0 == temp)  
  20.         printf("After setenv: rewrite= 0 and linux= %s.\n",getenv("linux"));  
  21.     temp = setenv("linux","goodbye linux",1);  
  22.     if(0 == temp)  
  23.         printf("After setenv: rewrite != 0 and linux= %s.\n",getenv("linux"));  
  24.     temp = unsetenv("linux");  
  25.     if(0 == temp)  
  26.         printf("After unsetenv: linux= %s.\n",getenv("linux"));  
  27.     exit(0);  
  28. }  

程序输出:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. getnev: USER = nifengweijifen.  
  2. After putenv: linux= linux3.8.  
  3. After setenv: rewrite= 0 and linux= linux3.8.  
  4. After setenv: rewrite != 0 and linux= goodbye linux.  
  5. After unsetenv: linux= (null).  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值