命令行参数
命令行参数是指用户在启动程序时通过命令行传递给程序的参数。这些参数可以用于控制程序的行为、传递输入数据或配置选项。
在 C/C++ 中,命令行参数通过 main
函数的参数传递
命令行参数列表 argc:参数的个数 argv[]:参数的清单
为什么要有它?看以下代码及运行结果
我们用的指令后面为什么可以带选项,带选项运行结果就不一样,这就是通过命令行参数实现的
同一个程序,可以根据选项的不同,表现出不同的功能
环境变量
在main函数中可以有三个参数,前两个讲过了,第三个参数是环境变量
常见环境变量
PATH
为什么我们编译的代码不能直接写code必须待带./code表示当前路径的文件
而系统的指令就不用带./
系统的指令不用带./,因为系统默认在/usr/bin目录里找,系统的指令已经在usr/bin目录里了
为什么系统知道命令在/usr/bin路径下?
因为环境变量PATH,告诉了shell应该去哪一个路径下查指令
查看PATH
PATH是指定路径的集合,系统可执行文件的搜索集合
如果我不想带路径,让我的程序运行起来?
1. cp /usr/bin
2.把自己的路径,添加到PATH中
我们把xshell关掉再重新打开,看看PATH会不会变
发现我们改过的PATH又回到初始状态了,这说明环境变量PATH是内存级别的。那么最开始环境变量的内容是从哪里来的--开始都是在系统配置文件中的
我们登陆xshell,启动一个xshell进程->读取用户和系统相关环境变量的配置文件->形成自己的环境变量表
配置文件在家目录里 .bashrc .bach_profile
我们在配置文件中,PATH加上我们的路径,这样我们即使关掉xshell再打开,我们的路径在PATH中也不会消失了。
HOME
当前路径对应的家目录
发现用户身份变化,同一个HOME变量,但是环境变量的内容是不一样的
是默认在我的家目录下才设置的环境变量,还是先读取环境变量,把我当前的用户设置进当前的默认路径呢?
当我们登陆的时候,先创建bash,bash读取环境变量配置文件->PATH,HOME已经被设置好了,bash也是一个进程也有自己的cwd,环境变量HOME就是用户登陆时的cwd
获取环境变量
getenv()
PWD是保存进程所在的工作路径的,进程能获得自己所在的路径
可以写一个程序只让某一个用户进行访问
sunhao用户可以正常访问
切换到root,不可以访问
环境变量的导入删除和验证
shell中既有本地变量又有环境变量
set可以查到本地变量以及环境变量的信息
使用
export
命令设置新的环境变量。
删除环境变量
unset
本地变量和环境变量都是bash进程维护的字符串
本地变量不会子进程被继承,环境变量会被子进程继承
下面代码验证环境变量会被子进程继承
最开始ISRUNNING=1,ISRUNNING在本地变量中,子进程不能继承
后来把ISRUNNING export导入环境变量中,子进程可以继承
上面代码确实验证了环境变量可以被bash的子进程继承,那么子进程再fork()出来的子进程也会继承环境变量吗?可以的。这就说明环境变量具有"全局属性"
为什么?
1.系统的配置信息,尤其是具有指导性的配置信息,他是系统配置起效的一种表现
2.进程具有独立性,环境变量可以用来进程间传递数据(只读数据)
第三方变量environ获取环境变量