getenv/putenv/setenv/unsetenv

Linux环境变量操作函数

getenv - get an environment variable

#include <stdlib.h>

char *getenv(const char *name);
//Returns:与name相关的value的指针, NULL if not found
  • 我们应该总是使用getenv来获取环境的特殊值,而不是直接访问environ
  • 下章我们会知道我们可以仅仅影响当前进程和其子进程的环境
  • 我们不能影响父进程的环境,父进程经常是shell
  • 环境变量删除容易,增加难(栈上面存放环境变量的空间是无法扩充的)

ISO C没有定义任何环境变量。一些环境变量是由单一Unix规范的POSIX.1定义的。

单一Unix规范定义的环境变量如下:
figure 7.7

putenv - change or add an environment variable

#include <stdlib.h>

int putenv(char *string);
int setenv(const char *name, const char *value, int overwrite);
int unsetenv(const char *name);
//Returns: 0 if OK, nonzero on error

int clearenv(void);

putenv:用形式为name=value的字符串放入环境列表,如果已经存在,则替换旧值
setenv:set name to value. 如果name已经存在,若overwrite为真,已经存在的值被覆盖。如果overwrite为假,name不变,name值不变为value,且不产生error
unsetenv:移除任何name的定义。如果定义(definition)不存在,不产生错误
clearenv:移除environment list的所有entries

putenv和setenv的区别

  1. setenv必须分配空间给name = value string
  2. putenv是直接将参数传给环境
  3. 如果putenv传入的string是在stack上分配的,会出错。

修改、增加环境变量的几种情况

  • 如果我们修改环境变量
    • 新值尺寸小于等于旧值尺寸,直接复制
    • 反之,malloc获得新string的空间,替代环境列表中旧的指针
  • 增加新name
    • 第一次增加新值,在heap上给environment list分配空间
    • 不是第一次,之前已经为环境列表在heap上分配了新空间,直接调用realloc分配更大的空间来保存更多的pointer
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猎羽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值