大家在写C/C++程序的时候肯定见过下面这种情况:
main函数里面携带的参数,平常写代码过程中很少用到这两个参数,接下来我们就研究一下
我们也不知道 指针数组argv里面到底保存的是什么,也不知道这个argc到底代表的意思是什么?
那我们尝试直接打印出来,进行观察:
接下来我们在bash中再输入:
结果就接着显示输入的字符
因此我们发现:*agrv是一个指针数组,是一个字符类型的,说明里面保存的是字符串的地址,通过命令行结果我们发现每一个字符以空格为分隔符,将字符串的地址保存在*argv中,最终*argv数组以NULL结尾,第一个都是可执行文件的名字+路径
命令函参数的作用:
1、命令行参数是外部的数据,外部的数据通过主函数的参数传递进函数的内部,这就相当于把写的程序 的扩展性更高了。
2、命令行参数一般是文件的路径。程序里面一般是处理一些文件的,文件的路径就作为命令行参数传递进主函数里面,然后通过文件的路径,去处理这个文件。
3、可以使用命令函参数区分用户,进而做出不同人走不同代码的逻辑
环境变量的问题引入
平时我们在使用Linux的时候,使用的一些指令比如:touch、ls -a、 ls -a -l等等
这些指令的本质是什么的?第一个参数是要执行的程序,第二个参数是(后面的选项去全部都是字符串,会以命令行参数的形式传递给对应的形参,最终根据参数的值,让同一个程序执行不同的功能)
我们在Linux系统中进行操作的时候通常会发现,当我们使用系统的命令的时候,比如:ls,pwd,cd等等,通常不需要带对应的命令的路径,只需要直接输入指令即可,其实这些指令都是程序,而当我们运行自己写的程序的时候却发现必须带相关路径,如果没带路径,就会报出:command not found的错误,其实也很好理解,因为我们要执行一个命令或者程序首先肯定要找到这个程序或者命令,知道这个程序或者路径在哪里,才能够执行它,而系统中的命令不需要带路径就能执行的原因跟今天要学习的环境变量中的PATH变量有关系
提示:以下是本篇文章正文内容,下面案例可供参考
环境变量:环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数(变量),如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们所链接的动态静态库(后面学)在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。还有其他用途等后面学完了常见的环境变量就能够理解了,环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性
env: 用于查看系统中所有环境变量的命令
也可以使用env配合之前学习的文本行过滤工具:比如env|grep PATH
,这样可以方便找到我们想要的环境变量
使用echo &环境变量名称 echo $PATH
使用getenv()
函数获得环境变量的内容 头文件:#include
使用命令行参数在程序里获取环境变量 echo $PATH
PATH
PATH 打印出来是一个字符串,这个字符串以:作为分隔符,每一个子串都是一个搜索路径,因此执行指令:ls、pwd、touch等等指令的之后,会在PATH换将变量里面的搜索路径中逐个寻找。所以我们自己写的程序在调用的时候为什么还要进行路径的指定呢?因为在PATH中没有添加我们自己写的程序的搜索路径,因此就需要进行手动添加路径
追加PATH变量里面的值:PATH = $PATH:路径
PATH = $PATH:/bin/root/........
PWD
原因是在系统当中会存在一个环境变量:PWD,它是记录当前所处路径的环境变量,当我们使用cd切换路径的时候,PWD就会发生改变,然后pwd指令直接读取环境变量里面的值即可
普通用户的家目录:/home/xxx
root用户的家目录:/root
HOME
这个环境变量在用户登陆的时候就已经被设置好了,root账号设置成/root,普通用户设置成/home/xxx,之后要想进入自己的家目录,直接cd $HOME
即可
命令行启动的进程都是shell/bash的子进程,子进程的命令参数和环境变量是父进程通过bash传递给我们的,当我们更改环境变量的信息的时候,虽然更改后环境变量的值会修改,但是我们在重新启动xshell之后,环境变量又变回系统配置的值了,所以我们可以得出:每一次在登陆xshell的时候bash解释器会自动从某个地方读取自动形成自己的环境变量表信息
**那么父进程的环境变量信息从哪里读取呢?**我们每一名用户在自己的家目录下都会存在一个隐藏的文件
.bash_profile
,你的bash进程都会读取这个配置文件,形成一张环境变量表信息
export 环境变量名称=值