"Oh heiya New World!"
谈起环境变量,也许我们在敲代码的层面上并不关心。在链接的时候,我们从来没有告诉编译器,去哪里找动态库去链接;我们也从来没有告诉进程 执行该进程的用户是谁?以及在命令行解释器时,启动一个进程,实质是在命令行解释器内 进行程序替换……
环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性
我们在使用命令行解释器时,通常直接使用ls 、 pwd 、top 等等”命令"时 为什么不需要带"./"? 但是我们自己写的程序却需要这样呢?
根本上不是说我们的程序 貌似更"低级",因为ls pwd top等命令也是可执行的文件,它们无非是在 用户登录时 已经就加载好了!并且能够找到该路径下的 可执行文件!
//指定命令的搜索路径
echo $PATH
但那些配置的文件在哪里呢?
1.“/etc/profile”文件,该文件配置的环境变量将应用于登录到系统的每一个用户;
2.“/etc/bashrc”,修改该文件配置的环境变量将会影响所有用户使用的bash shell;
3.“/etc/environment”,该文件包含与系统运行相关但与用户无关的环境变量;
4.“~/.profile”;5、“~/.bashrc”。
HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)
SHELL : 当前Shell,它的值通常是/bin/bash。
//查看
echo $环境变量名
export: 设置一个新的环境变量
env: 显示所有环境变量
unset: 清除环境变量
set: 显示本地定义的shell变量和环境变量
我们在命令行定义的变量,是本地变量;
因此需要导入变量;
进行取消设置;
上述仅仅从命令行解释器这个层面上,解释了环境变量。但是 环境变量是贯穿整个程序始终的全局变量。
比如: 在一个受权限限制的文件,它是如何辨别谁可以对他进行什么合法操作 什么不合法?
为什么不同的用户进行vim配置 会有对应不同的vim编辑器?
int main(int argc,char *argv[],char *envp[])
1. 为什么main函数会有三个参数?这三个参数是什么意思?
2. main作为一个函数 是否应该被调用? 被谁调用呢?
3. main函数的返回值是返回给谁的呢?
C语言规定main函数是C程序的入口,程序中的其它函数直接或间接被main函数调用后才能被执行,如果没有被main调用,这个函数在程序中就是无用的。
在linux下 main函数的传参 是传给”子进程”的!
argc:表示运行程序的时给main函数传递参数的数量;
argv:字符串的数组,向一个字符串,末尾为NULL结尾;
envp:也是一个字符串的数组,以NULL结尾;
多说无益,上来实操。
所以,有时候我们就可以根据 传参的选项 执行不同 的代码逻辑;
#include char *getenv(const char *name);
命令行bash 为main创建子进程,子进程会继承父进程的环境变量。 这也是为什么 我们可以查看和 bash页面下 一样的环境变量。
一般推荐使用getenv 直接拿到想要的环境变量。
#include int putenv(char *string);
①echo $+环境变量名 可以查看变量
②main的三个参数
③getenv \envp[] \ char** envrion 都可以获取环境变量
上一篇:让我们进入面向对象的世界(二)
下一篇:校招补一个什么样的项目比较好?