【linux】环境变量(进程二)

这里写目录标题

命令行参数:

不谈命令行参数就谈环境变量就是耍流氓。

相信我们在C语言阶段都在main函数里见过参数。
例如int main(int argc, char* argv[])
这是什么东西呢?
话不多说我们直接打印一下看看:
在这里插入图片描述
现象:
在这里插入图片描述
到此为止我们发现argv这个数组存放着一个个指针,这些指针指向我们传入的参数。


再来看这样一段代码:
在这里插入图片描述
现象:
在这里插入图片描述

那么现在就产生两个问题:

  1. 为什么要有这中功能的存在?
  2. 谁传给我们的?

先回答第一个:
我们先来看这样一个命令:
在这里插入图片描述

是不是与我们刚刚进行的操作一样!!

没错,命令行参数的本质就是交给我们程序不同的选项。用来指定不同的程序功能!!


再来看第二个问题:

先说答案:是bash。
那么他是如何给我们的呢?

先来看这样一段代码:
在这里插入图片描述

现象:
在这里插入图片描述
由此可以验证子进程是可以拿到父进程的代码和数据的。

那我们父进程的父进程的谁呢,也就是父进程的ppid
在这里插入图片描述
就是bash,所以我们运行的二进制可执行文件就是bash的子进程,linux中大约70多的命令都是bash子进程。

那我们将二进制文件名与所带的选项给bash,bash的子进程也理所应当的可以拿到这些数据。在这里插入图片描述

环境变量:

相信大家也发现看了我们自己执行程序与直接执行linux系统中的命令用法是不一样的,我们的进程执行需要加所在路径,这就是环境变量再从中作祟。
我们先来以一个PATH环境变量来作为切入点。
在这里插入图片描述
PATH是环境变量的变量名,使用$就像指针解引用一样得到指向的内容。
再使用echo命令进行打印。

我们得到PATH内容发现,这里就包含了一个一个路径,以作为分隔符,而我们执行例如ls touch等命令时他们的所在路径就在PATH内,因此命令行解释器就知道去哪里寻找这些命令了在这里插入图片描述

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-03-20 14:16:07       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-20 14:16:07       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-20 14:16:07       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-20 14:16:07       20 阅读

热门阅读

  1. Linux中压缩/解压缩和归档

    2024-03-20 14:16:07       25 阅读
  2. Jemalloc的编译安装

    2024-03-20 14:16:07       18 阅读
  3. 【源码阅读】evmⅡ

    2024-03-20 14:16:07       18 阅读
  4. kafka无法消费数据

    2024-03-20 14:16:07       21 阅读
  5. golang实现循环队列

    2024-03-20 14:16:07       19 阅读
  6. 蓝桥杯每日一题:接龙数列

    2024-03-20 14:16:07       15 阅读