目录
一、环境变量的概念和基本命令
二、环境变量的组织结构及获取环境变量的方式
(1)组织结构
(2)获取环境变量
命令行第三个参数
通过第三方变量environ获取
通过系统调用getenv获取
三、命令行参数
一、环境变量的概念和基本命令
环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数(比如文件的查找路径)如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性。
环境变量可以被子进程继承下去(但是一定要export导出)。
常见的环境变量:
查看环境变量的方法:
和环境变量相关的命令:
二、环境变量的组织结构及获取环境变量的方式
(1)组织结构
每个程序都会收到一张环境表,环境表是一个字符指针数组,每个指针指向一个以’\0’结尾的环境字符串
(2)获取环境变量
命令行第三个参数
(这里的参数会在进程切换的时候自动传递)
#include <stdio.h>
int main(int argc, char *argv[], char *env[])
{
int i = 0;
for(; env[i]; i++){
printf("%s\n", env[i]);
}
return 0;
}
通过第三方变量environ获取
(也就是说用户即使不传参,也能通过environ得到环境变量表)
#include <stdio.h>
int main(int argc, char *argv[])
{
extern char **environ;
int i = 0;
for(; environ[i]; i++){
printf("%s\n", environ[i]);
}
return 0;
}
libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以在使用时 要用extern声明。
通过系统调用getenv获取
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("%s\n", getenv("PATH"));
return 0;
}
三、命令行参数
我们之前就知道main函数中有三个参数,分别是argc,argv[ ],和env[ ]。他们分别是命令行参数的数量,命令行参数的起始地址,以及环境变量。
命令行参数其实就是命令行解释器bash帮我们把我们敲到命令行中的内容保存下来,然后以空格为分隔符,将他们存放到一个char*的数组中,这个数组的最后一个元素会被写成NULL。
然后我们main函数用argv[ ]等参数就能在内部解析命令行,针对不同的情况做if else判断来执行对应的代码。如:ls -a -l
我们到这里其实就知道bash在执行代码的时候,其实就是fork创建了一个子进程,然后将命令行参数和环境变量在进程替换exec的时候传递给子进程,子进程解析命令行参数来执行不同情况的代码。