这里写目录标题
- 命令行参数:
- 环境变量:
命令行参数:
不谈命令行参数就谈环境变量就是耍流氓。
相信我们在C语言阶段都在main
函数里见过参数。
例如int main(int argc, char* argv[])
这是什么东西呢?
话不多说我们直接打印一下看看:
现象:
到此为止我们发现argv
这个数组存放着一个个指针,这些指针指向我们传入的参数。
再来看这样一段代码:
现象:
那么现在就产生两个问题:
- 为什么要有这中功能的存在?
- 谁传给我们的?
先回答第一个:
我们先来看这样一个命令:
是不是与我们刚刚进行的操作一样!!
没错,命令行参数的本质就是交给我们程序不同的选项。用来指定不同的程序功能!!
再来看第二个问题:
先说答案:是bash。
那么他是如何给我们的呢?
先来看这样一段代码:
现象:
由此可以验证子进程是可以拿到父进程的代码和数据的。
那我们父进程的父进程的谁呢,也就是父进程的ppid
就是bash,所以我们运行的二进制可执行文件就是bash的子进程,linux中大约70多的命令都是bash子进程。
那我们将二进制文件名与所带的选项给bash,bash的子进程也理所应当的可以拿到这些数据。
环境变量:
相信大家也发现看了我们自己执行程序与直接执行linux系统中的命令用法是不一样的,我们的进程执行需要加所在路径,这就是环境变量再从中作祟。
我们先来以一个PATH
环境变量来作为切入点。
PATH
是环境变量的变量名,使用$
就像指针解引用一样得到指向的内容。
再使用echo命令进行打印。
我们得到PATH内容发现,这里就包含了一个一个路径,以:
作为分隔符,而我们执行例如ls touch等命令时他们的所在路径就在PATH内,因此命令行解释器就知道去哪里寻找这些命令了