
一、命令行参数首先有个问题我们前面在学习语言的时候C语言和C的main函数是否可以带参呢答案是可以的。其实我们的main函数是可以带如下这样的参数的其中crgc是表示的argv中有多少个字符串argv是字符串数组。那么其表示的啥呢可以发现其和我们在Linux中的命令行的输入方式很像前面表示我们的指令然后后面表示我们的选项。那么我们不妨大胆的猜测一下我们的指令就是按照这样的方式然后在代码中通过条件语句来判断要做的工作。其实确实如此我们也可以实验一下运行如下那么为啥要有命令行参数呢命令行参数的本质应用就是为了实现一个命令其可以根据不同的选项然后去实现不同的功能这也是Linux中所有的命令选项功能的实现方式。补充1、命令行参数的个数至少是1argc1然后第一个是我们的指令argc[0]是一定有元素的2、选项之间是按照空格进程分割的一个字符也是字符串3、一共有argc个参数那么argv[argc]NULL在我们Windows中也是存在命令行参数的。二、环境变量1、初识环境变量前面我们提到过一个问题就是为啥我们要执行自己的程序的时候要输入程序的路径。这是告诉操作系统我们要执行的程序在那里。那么我们也提到、我们可以将其弄得不需要告诉操作系统路径的方法就是将文件挪动到一些指定路径下。其实这些路径是保存在一个环境变量下的PATH。那么我们可以通过下面的方法查看所以我们可以将我们的程序文件挪动到下面这几个路径下那么执行的时候就不需要指定路径了。可以看到我们此时就不需要带路径了。但是这个方式我们不推荐因为这样会污染了系统的指令。上面我们说到当我们输入指令时候没有带路径的话那么就会去PATH环境变量中的路径中查找那么我们是否可以将我们的目录也写入到这个环境变量呢下面我们来试试。这个修改的方式是一个错误演示可以发现我们将其改的只有我们后面号的内容了。对于修改出错了我们也不必慌张只需要将我们的机器重启一下即可。其就和我们在语言中对变量进行赋值一样所以我们还要将原理的内容也加上但是也不需要将其进行拷贝加上我们只需要如下可以看到我们上面只直接和我们的命令一样不需要带指令就可以将我们的程序运行了。实际上我们操作系统中还有很多的环境变量这些环境变量我们可以通过env指令将其打印到我们的屏幕上。如下可以看到有很多属性我们还是看得懂的上面的环境变量往往是具有全局属性的下面我们来认识几个环境变量1、PATH就是我们进行输入指令的时候没带路Linux的默认寻找路径2、USER当前主机的工作用户3、PWD就是我们当前的工作路径所以我们使用的pwd指令就是将这个环境变量打印到我们的显示器的4、SHELL就是我们当前使用的bash解释器5、HOME当前用户的加目录那么这个环境变量是那里来的呢这个是从Linux系统的配置文件来的后面我们对这部分进行详解。实际上我们的C语言程序中main函数还可以有第三个参数还有一个环境变量表的参数那么这个本质就是将我们的环境变量表传给这个进程那么这个工作是谁做的呢实际上是这个进程的父进程那么我们在Linux环境下执行一个程序那么其父进程就是bash。那么bash的环境变量表是那里来的呢其实在我们的Linux系统中有一个配置文件然后呢我们的机器每次打开都会去先加载这个问文件。在.profile文件中会去打开.bashrvc文件然后呢这个文件就是会去加载我们的配置文件了我们可以实验一下在这个文件中加一个语句echo 我打开了这个文件然后我们重新将其开机那么就会将这个打印出来也就验证了我们的开机中是加载了这个文件的。所以总的来说在我们的Linux中有一个磁盘文件开机的时候都会将其加载到我们的bash进程中然后我们在Linux中执行自己的程序那么bash进程会将这个环境变量表传递给我们的程序的。所以实际上我们前面对于PATH的修改只是修改的内存上的内容并没有对实际文件进行修改所以也是为啥我们将机器开机重新开机其PATH又恢复了。那么我们如何进行获取具体的环境变量呢2、获取环境变量我们有如下方式获取到环境变量。首先第一种就是通过我们的env指令那么就会将其所有的环境变量打印出来然后我们可以通过grep指令对其进程筛选然后查找到对应的环境变量。然后我们可以echo $对应的环境变量那么就可以获取到这个环境变量了这个也是我们在命令行中最推荐的方式。然后在我们C语言程序中也可以获取到对应的环境变量我们有一个全局指针变量environ指针其是一个二级字符指针char**通过其可以查看对应位置的环境变量。然后我们还提供了getenv然后其参数就是一个字符串传入要查找的环境变量名然后就可以得到这个环境变量了。然后我们也可以在我们的环境变量表中添加环境变量。不过要注意的是我们当前进程在环境变量表中添加的环境变量是不会被子进程继承的这是因为这个修改是在内存级上的修改并没有到磁盘内存中所以我们后续关机重启然后进程重新获取配置文件那么又恢复原样了。那么这种环境变量我们称为本地变量然后其他的就是全局变量。当我们切换一个进程后是不会有这个环境变量的。然后在我们的Linux中对于命令也是有区别的就比如当我们将PATH中的环境变量进行全部置空那么有的指令我们是使用不了的了但是还有的指令是可以使用的这个就是shell中的内建命令其是不依赖其他的第三方库的是bash内部的一次函数调用。