linux 环境变量
环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数。
前言
C/C++代码在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。
环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性。
环境变量理解
创建一个C程序,输出HelloWorld。
在执行test1.out程序时,需要加上 ./ 当前路径。而在执行 ls 这样的系统级程序而不用添加。
PATH
PATH是Linux内的一个环境变量,每个路径用 : 分隔。在执行指令时,会向在这几个路径下查找,如果找到不到就会报错。-bash: s: command not found
有两种方法使不用加上 ./ 执行helloworld程序。
1 将test1移动到 PATH 那几个路径中。
2 将程序所在路径添加到PATH中。
这种添加路径只是临时添加,只是此次登陆有效。
常见环境变量
查看环境变量: echo $NAME
env 命令,查看所有环境变量。
- BASH ; 保存当前采用的shell。
- HOME: 保存当前用户家目录。
- HOSTNAME:当前主机名
- HISTSIZE:保存history命令保存的历史命令最大数量。
环境变量具有全局属性
·环境变量通常具有全局属性,可以被子进程继承.
环境变量相关命令
- .export:设置一个新的环境变量
- env:显示所有环境变量
- .unset:清除环境变量
- .set:显示本地定义的shell变量和环境变量
调用系统接口获取环境变量
自定义环境变量
在命令行,用户可以定义两种变量,本地变量和环境变量,本地变量只在当前登录有效,也无法被子进程继承。
运行该C程序,产生一个进程,该进程为bash的子进程,该子进程继承了环境变量。
子进程无法继承本地变量。
set 命令不仅可以查看本地变量,也可以查看环境变量,env命令无法查看本地变量。
echo 指令可以查看本地变量,因为echo 是shell自带的内建命令,可以直接访问。
unset : 取消一个环境变量
命令行参数
在C语言中,main函数是可以有参数的,第二个参数是一个指针数组,第一个参数是指针数组元素个数。
1 #include <stdio.h>
2 #include <unistd.h>
3 #include <stdlib.h>
4
5 int main(int argc,char* argv[])
6 {
7 int i = 0;
8 for(i = 0;i < argc;i++)
9 {
10 printf("argv[%d]=%s\n",i,argv[i]);
11 }
12 }
在运行程序时,我们可以手动传入参数,argv数组保存这一个个指向这些字符串的指针。
命令行参数的作用
计算器。
实现加减乘除。 通过输入参数的不同,实现不同的功能,这就是命令行参数的最大作用
这和linux 中的各种命令,带上各种参数是一样的,通过传入的各种参数,实现不同的功能。
main函数第三个参数
env 是一个指针数组,数组内存放所有的环境变量,最后一个元素为null。
执行此程序,打印出所有环境变量,环境变量能被子进程继承,就是通过传参实现。
还可以通过一个全局变量 environ 获取全局变量,它和env[] 一样。
1 #include <stdio.h>
2
3 int main()
4 {
6 extern char** environ;//使用前需要extern
7
8 int i = 0;
9 while(environ[i])
10 {
11 printf("%s\n",environ[i]);
12 i++;
13 }
14
15 }