Linux小黑板(3):环境变量

 "Oh heiya New World!"


一、什么是环境变量?

        谈起环境变量,也许我们在敲代码的层面上并不关心。在链接的时候,我们从来没有告诉编译器,去哪里找动态库去链接;我们也从来没有告诉进程 执行该进程的用户是谁?以及在命令行解释器时,启动一个进程,实质是在命令行解释器内 进行程序替换……

       环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性 


二、常见的环境变量

(1)理解PATH

我们在使用命令行解释器时,通常直接使用ls 、 pwd 、top 等等”命令"时 为什么不需要带"./"? 但是我们自己写的程序却需要这样呢?

根本上不是说我们的程序 貌似更"低级",因为ls pwd top等命令也是可执行的文件,它们无非是在 用户登录时 已经就加载好了!并且能够找到该路径下的 可执行文件!

//指定命令的搜索路径
echo $PATH

但那些配置的文件在哪里呢?

1.“/etc/profile”文件,该文件配置的环境变量将应用于登录到系统的每一个用户;

2.“/etc/bashrc”,修改该文件配置的环境变量将会影响所有用户使用的bash shell;

3.“/etc/environment”,该文件包含与系统运行相关但与用户无关的环境变量;

4.“~/.profile”;5、“~/.bashrc”。

如何让自己的可执行程序 也成为系统命令那样跑?

①将自己的可执行文件 拷贝到 被填入进PATH里的路径下(不推荐);

 

②export导入该程序的路径(推荐);  

(2)其余环境变量 

①HOME 

HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录) 

②SHELL

SHELL : 当前Shell,它的值通常是/bin/bash 

③查看环境变量 

//查看
echo $环境变量名

(3)定义环境变量 

export: 设置一个新的环境变量

env: 显示所有环境变量

unset: 清除环境变量

set: 显示本地定义的shell变量和环境变量 

我们在命令行定义的变量,是本地变量;

因此需要导入变量; 

进行取消设置;


三、进程内的环境变量

上述仅仅从命令行解释器这个层面上,解释了环境变量。但是 环境变量是贯穿整个程序始终的全局变量。

比如: 在一个受权限限制的文件,它是如何辨别谁可以对他进行什么合法操作 什么不合法?

          为什么不同的用户进行vim配置 会有对应不同的vim编辑器?

(1)main函数的三参数

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结尾;

多说无益,上来实操。

 所以,有时候我们就可以根据 传参的选项 执行不同 的代码逻辑;

(2)环境变量 

①getenv 

       #include <stdlib.h>
       char *getenv(const char *name);

②main参数 与 全局指针environ

命令行bash 为main创建子进程,子进程会继承父进程的环境变量。 这也是为什么 我们可以查看和 bash页面下 一样的环境变量。 

一般推荐使用getenv 直接拿到想要的环境变量。

③进程内添加环境变量;

       #include <stdlib.h>
       int putenv(char *string);


总结

①echo $+环境变量名 可以查看变量

②main的三个参数 

③getenv \envp[] \ char** envrion 都可以获取环境变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值