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规范定义的环境变量如下:
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的区别
- setenv必须分配空间给
name = valuestring - putenv是直接将参数传给环境
- 如果
putenv传入的string是在stack上分配的,会出错。
修改、增加环境变量的几种情况
- 如果我们修改环境变量
- 新值尺寸小于等于旧值尺寸,直接复制
- 反之,
malloc获得新string的空间,替代环境列表中旧的指针
- 增加新name
- 第一次增加新值,在heap上给
environment list分配空间 - 不是第一次,之前已经为
环境列表在heap上分配了新空间,直接调用realloc分配更大的空间来保存更多的pointer
- 第一次增加新值,在heap上给
本文深入探讨了Linux环境下获取、修改、删除环境变量的操作函数,包括getenv、putenv、setenv、unsetenv和clearenv等,并详细解释了它们的使用场景和区别。
1029

被折叠的 条评论
为什么被折叠?



