环境变量
linux系统中的环境变量是用来指定系统运行的环境的一些参数,例如编写代码时,链接时的动态静态库,我们并不知道在哪里,但照样可以链接成功,简单来说,就是通过环境变量帮助编译器进行查找。
查看环境变量
echo $环境变量名称
常见的几个环境变量
- PATH:系统提供搜索路径的环境变量
- HOME: 简单来说就是用户登录到linux系统中时,默认的目录
- HISTSIZE:保存历史命令记录的条数(例如,翻动上键时可以找到上一次的命令,此次算一条)
- SHELL:当前SHELL,值通常为/bin/bash
环境标量相关的指令
- env :显示所有的环境变量
- echo:显示某个环境标量
- export:设置一个新的环境变量
- unset: 清除环境变量
- set: 显示本地定义的环境变量
环境变量也是一种变量,这种变量具有全局属性
获取环境变量的方法
1. 通过代码获取,用main函数的参数来获取
#include<stdio.h>
int main(int argc,char *argv[],char *env[]) //第一个参数表示参数的个数,第二个是具体的参数,第三个是环境变量
{
int i = 0;
for(; env[i];i ++i)
{
printf("%s\n",env[i]);
}
retrun 0;
}
2.通过第三方变量enviro获取
#include<stdio.h>
int main()
{
3.用getenv函数来访问特定的的环境变量
printf("%s\n",getenv());
地址空间
内存地址就是对一个内存的一个编号,一个地址指向的就是内存的某个位置
在实际操作中我们发现,用fork创建的子进程和父进程输出的地址一模一样,但内容变量是不一样的,在实际中,两个进程的物理地址是不可能一样的,由此可以得出结论:我们用c/c++语言所看到的地址都是——虚拟地址,子进程和父进程输出的变量不是同一个变量
创建一个进程的底层实现,如下图
创建一个进程总结:
- 先为进程创建一个PCB;
- 每一个PCB都指向一个虚拟地址(mm_struct);
- 系统在分配一个页表将虚拟地址映射到物理内存当中;(如上图所指,所以父进程和子进程的地址相同,即虚拟地址相同,内容不同,其实是被映射到了不同的物理空间)