【Linux篇】环境变量与地址空间
一.环境变量
1. 环境变量
1.1基本概念
- 环境变量
(environment variables)
一般是指在操作系统中用来指定操作系统运行环境的一些参数 - 如:我们在编写
C/C++
代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。 - 环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性
- 命令行参数
我们会发现argv
是一个变长数组,会把我们输入的内容呈现出来。实际上argv
是一个指针数组。当我们在命令行中输入一个./code
以空格作为分隔符,其实我们输入的时一个长字符串,我们把它叫做命令行或者命令行命令,其实就是一个字符串。当我们执行c语言程序时,这个字符串就会被切分成以空格作为分隔符,切成好几份,所以它把第一个字符串的地址填在argv[0]
里面,依次类推。其中数组的有效元素个数就是argc
所以有人帮我们把命令行当中我们输入的字符串打散成这种以空格作为分隔符的上图这个样子,这个样子就叫做命令行参数,命令行参数依次变成一个字串,放到一个叫argv
的数组里,一共有argc
个有效元素,最后这个argv
把有效元素放完之后,必须以NULL
结尾。
指令选项实现原理:main
函数的命令行参数,是实现程序不同子功能的方法。
进程有一张argv
表,用来支持实现选项功能!
- 我们会发现当执行系统命令比如
ls
时不需要带./
,而执行我们自己的程序时就需要带./
,这是为什么呢?
- 要执行程序我们先得找到它,
./
表示在当前路径下,而系统命令不需要是因为存在环境变量,来帮助我们找到目标二进制文件 ls
是在/usr/bin/
路径下的,我们会发现当前路径下我们输入code
是不会运行的,而当我们把code
拷贝到/usr/bin
路径下就会执行了- 执行命令时系统为什么会在
/usr/bin
路径下去查呢?答案是系统中存在环境变量(PATH),来帮助系统找到目标二进制文件 - 环境变量(PATH):系统中搜索指令的默认搜索路径
1.2 常见环境变量
- PATH: 指定命令的搜索路径
- HOME: 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)
- SHELL: 当前
Shell
,它的值通常是/bin/bash
。
1.3 查看环境变量方法
env
:查看所有环境变量
环境变量的构成:名字+内容
echo $NAME
: //NAME(你的环境变量名称)查看单个环境变量