Linux学习笔记——环境变量及环境变量操作函数

环境变量

环境变量,是指在操作系统中用来指定操作系统运行环境的一些参数。通常具备以下特征:

  • 其本质是字符串
  • 有统一的格式:名=值[:值]
  • 值用来描述进程环境信息
  • 存储形式:与命令行参数类似。char *[] 数组,数组名 environ,内部存储字符串,NULL 作为哨兵结尾
  • 使用形式:与命令行参数类似
  • 加载位置:与命令行参数类似。位于用户区,高于 stack 的起始位置
  • 引入环境变量表:需声明环境变量,extern char **environ;

常用环境变量

环境变量名作用
PATH可执行文件的搜索路径。ls命令也是一个程序,执行它不需要提供完整的路径名/bin/ls,然而通常我们执行当前目录下的程序 a.out 却需要提供完整的路径名./a.out,这是因为PATH环境变量的值里面包含了ls命令所在的目录/bin,却不包含a.out所在的目录。PATH环境变量的值可以包含多个目录,用:号隔开
SHELL当前 Shell,它的值通常是/bin/bash
TERM当前终端类型,在图形界面终端下它的值通常是 xterm,终端类型决定了一些程序的输出显示方式,比如图形界面终端可以显示汉字,而字符终端一般不行
LANG语言和locale,决定了字符编码以及时间、货币等信息的显示格式
HOME当前用户主目录的路径,很多程序需要在主目录下保存配置文件,使得每个用户在运行该程序时都有自己的一套配置。

我们可以使用 echo 命令查看环境变量值:

我们也可以编写一个程序打印所有环境变量:

#include <stdio.h>

extern char **environ;

int main(void)
{
	int i;
	for(i=0; environ[i]; i++){
		printf("%s\n", environ[i]);
	}
	return 0;
}

我们可以看到其打印了环境变量表:


环境变量操作函数

这里需要说明的是,当我们不知道一个函数的用途、返回值的含义或者需要的参数时,可以使用man命令查看:

man getenv

  1. getenv 函数
# 获取环境变量值
char *getenv(const char *name);
# 成功:返回环境变量的值;
# 失败:返回NULL(name不存在)
  1. setenv 函数
# 设置环境变量的值
int setenv(const char *name, const char *value, int overwrite);
# 成功:返回0;
# 失败:返回-1

这里参数 overwrite 取值:

  • 0:不覆盖原环境变量。(该参数常用于设置新环境变量)
  • 非0:覆盖原环境变量。

这里失败的情况有两种:

  • 传入的环境变量指针为空,或者环境变量名里有 = 号。
  • 没有足够的存储空间去增加一个新的环境变量
  1. unsetenv 函数
# 删除环境变量 name 的定义
int unsetenv(const char *name);
# 成功: 返回0
# 失败:返回-1

这里失败的情况为:

  • 传入的环境变量指针为空,或者环境变量名里有 = 号。

下面用一个实例来实验上面的函数:
setenv.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
	char *val;
	const char *name = "ABD";

	val = getenv(name);
	printf("1, %s = %s\n", name, val);

	setenv(name, "haha-day-and-night", 0);

	val = getenv(name);
	printf("2, %s = %s\n", name, val);
#if 0
	int ret = unsetenv("ABDFGH");
	printf("ret = %d\n", ret);

	val = getenv(name);
	printf("3, %s = %s\n", name, val);
#else
	int ret = unsetenv("ABCEFJEW=");
	printf("ret = %d\n", ret);
	
	val = getenv(name);
	printf("3, %s = %s\n", name, val);
#endif

	return 0;
}


一开始环境变量表没有 ABD,所以输出一个 null,之后在环境变量表里添加一个新的环境变量 ABD,因为是添加新的环境变量而不是覆盖,所以 overwrite 的值可以为 0。之后在输出环境变量 ABD 的值就为 haha-day-and-night。下面删除 ABCEFJEW= ,因为里面有 =,所以失败,返回 -1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值