分享

Linux应用编程|环境变量相关

 昵称11935121 2018-06-28

Linux应用编程|环境变量相关

作为一个热爱技术的程序猿,对于Linux的熟悉与使用是必不可少的。下面我们将对Linux应用编程以及环境变量相关进行讲解。

环境变量

环境变量,是指在操作系统中用来指定操作系统运行环境的一些参数。比如说,用户登录到系统后,他的家目录是什么?默认文本编辑器是什么?默认shell程序是什么?类似这样的信息就称为环境变量。环境变量通常具备以下特征:

① 以字符串形式存储;

② 以健值对格式存储:健=值[:值] (同一个健有多个值的话,值与值之间以:相隔)

③ 值用来描述进程环境信息。

存储形式:char *[]数组,数组名environ,内部存储字符串,以NULL结尾。

加载位置:位于用户区,高于stack的起始位置。

引入环境变量表:须声明环境变量。extern char ** environ;

查看本机的环境变量:使用命令env。

编程打印本机所有环境变量:

#include /* environ本质是{'HOME=/home/alvin', 'SHELL=/bin/bash', ...} */ extern char **environ; int main() { int i = 0; for (i = 0; environ[i] != NULL; i++) printf('%s\n', environ[i]); return 0; }

常用环境变量

按照惯例,环境变量字符串都是name=value这样的形式,大多数name由大写字母加下划线组成,一般把name的部分叫做环境变量,value的部分则是环境变量的值。环境变量定义了进程的运行环境,一些比较重要的环境变量的含义如下:

PATH

可执行文件的搜索路径。

比如我们在命令行窗口执行ls命令,系统会自动到PATH所指定的目录下寻找该命令所对应的程序,而无需我们显式的指定该命令完整路径/bin/ls。

而对于我们自己写的程序,我们通常需要加上完整的路径,比如执行当前目录下的程序a.out,需要执行./a.out,这是因为PATH环境变量的值里面不包含a.out所在的目录。

在Shell中查看某个环境变量的值,可以使用echo命令,比如查看PATH的值,可以执行以下命令:

$ echo $PATH

SHELL

当前所使用的Shell,它的值通常是/bin/bash,但不同的linux发行版可能不一样。

TERM

当前终端类型,在图形界面终端下它的值通常是xterm,终端类型决定了一些程序的输出显示方式,比如图形界面终端可以显示汉字,而字符终端一般不行。

LANG

系统默认语言,即系统的菜单、程序的工具栏语言、输入法默认语言等,决定了字符编码以及时间、货币等信息的显示格式。

HOME

当前用户主目录的路径,很多程序需要在主目录下保存配置文件,使得每个用户在运行该程序时都有自己的一套配置。

常用函数

getenv函数

函数说明:获取环境变量值

函数原型:char *getenv(const char *name);

函数返回值:成功:返回环境变量的值;失败:NULL (name不存在)

练习:编程实现getenv函数。

#include #include extern char **environ; int main(int argc, char **argv) { char *p = NULL; if (argc != 2) { printf('usage: ./getenv name\n'); return -1; } p = getenv(argv[1]); if (p == NULL) printf('no match!\n'); else printf('%s\n', p); return 0; }

setenv函数

函数说明:设置环境变量的值

函数原型:int setenv(const char *name, const char *value, int overwrite);

参数overwrite取值:

1:覆盖原环境变量

0:不覆盖。(该参数常用于设置新环境变量,如:ABC = haha-day-night)

返回值:成功:0;失败:-1

unsetenv函数

函数说明:删除环境变量name的定义

函数原型:int unsetenv(const char *name);

返回值:成功:0;失败:-1

注意事项:name不存在仍返回0(成功),当name带“=”时则会出错。

#include #include int main() { const char *name = 'ABC'; char *val = NULL; val = getenv(name); printf('1. %s = %s\n', name, val == NULL?'NULL':val); setenv(name, 'hello', 1); val = getenv(name); printf('2. %s = %s\n', name, val == NULL?'NULL':val); #if 0 int ret = unsetenv('ABC'); #else int ret = unsetenv('ABC='); //将出错#endif printf('ret = %d\n', ret); val = getenv(name); printf('3. %s = %s\n', name, val == NULL?'NULL':val); return 0; }

想要学习更多IT技术的小伙伴们,记得点个关注哦,小编会定期推出新的文章

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多