文章目录
- 环境变量的认识
- main函数参数问题
环境变量的认识
我们知道我们运行自己写的可执行程序的时候,我们必须带路径才能运行,可是执行系统指令的时候不用路径就能运行。
演示:
问题:系统命令可以直接运行,自己写的程序必须带路径这是为什么?
因为系统有环境变量,而系统指令的路径在环境变量所维护的路径中,自己的可执行程序没有在环境变量所维护的路径。
查看:
所以当可执行程序运行,系统首先会在环境变量所维护的路径下查看有没有该可执行程序。
那么我们如何让自己的可执行程序不用带路径也能运行呢?
将该可执行程序的路径放入环境变量中。
演示:
我们看到,将路径放入环境变量中后,我们的可执行程序确实不用带路径就可以运行了。
PATH:指定命令的搜索路径。
env:查看系统中的所有环境变量。
演示:
修改环境变量一般只在本次对话中有效,下次登入后就无效了。除非更改配置,但是不建议这种做法。
main函数参数问题
main函数最多有三种参数。
我们看到最后的env指针数组,它是什么呢?
它就是环境变量,它是一个指针数组,指向各个环境变量
代码演示:
我们可以看到确实用代码打印出了环境变量。
还有系统给我们提供的获取环境变量的接口数组指针也可以打印环境变量。
getenv函数:获取环境变量
演示:
我们可以看到,我们用getenv获取了PATH路径。
进程的环境变量是谁传的?
从父进程那继承下来的。
所以bash的环境变量就是,所有进程的环境变量。
证明:
在bash中添加一个环境变量,看代码中能不能输出。
我们看到了确实获取了我们自定义的变量。
结论:子进程的环境变量是从父进程那继承来的,默认所有环境变量都会被子进程继承。
所以环境变量具有全局属性。但不是所有具有全局属性的变量都是环境变量。这里就不演示了。
set:打印所有全局变量。
main函数的argc和argv叫做命令行参数。
argc是多少就觉定argv数组有几个参数
演示:
有很多人肯或有疑问,这个有什么用?
我们学了ls指令,ls参数不同就会有不同的功能,那么是怎么实现的呢?
代码简单演示: