Linux中环境变量

基本概念

环境变量Environmental variables一般是指在操作系统中用来指定操作系统运行环境一些参数。

我们在编写C、C++代码时候,在链接的时候从来不知道我们所链接的动态、静态库在哪里。但是还是照样可以链接成功。生成可执行程序。原因就是相关环境变量帮助编译器进行查找。

环境变量通常具有某些特殊属性。还有在系统中通常具有全局特性。

main函数的参数

根据代码实例观察幂函数参数以及命令行参数列表之间的关系。可以想一想计算机的发展历史,Linux其实底层就是用c语言写的。那么各种指令也是要通过c语言写的,所以在命令行解释器中输入在命令行输入的一些指令。指令的选项,那么底层也是要通过Linux内核的指令可执行程序的main函数进行运行。

所以main函数参数:

  • 第一个参数:是一个整数,表示命令行参数的个数,包括程序名本身。
  • 第二个参数,参数向量是一个字符指针数组。argv[0]表示程序名,argv[1]表示第一个命令行参数,以此类推。
  • 第三个参数,envp环境变量指针数组部分系统存在。是一个字符串指针数组用来传递环境变量的信息,每一个字符串指向以'\0'结尾的字符串表示环境变量。

main函数参数存在的原因。同一个程序可以根据命令行参数根据选项的不同表现出不同的功能。

main函数参数是谁传递的

输入的指令就是字符串shell命令行解释器拿到字符串。按照空格打算形成一张argv表和元素个数argc表。argv整个表示以null结尾的命令行启动的程序。附近全都是shell启动的命令与shell命令行是父子关系。父子进程具有独立性,子进程继承父进程的代码数据各自私有一份,尤其是数据只是只读子进程也能看到。

编译器,操作系统,加载器不是互相割裂的,彼此是有关系的。

常见环境变量

Path指定命令的搜索路径。

为什么系统中的指令可以直接执行,不需要带路径,但是我们写的二进制程序就需要带路径才能执行。这是因为系统的指令所在的路径。是存在于环境变量中的path路径中的。

Home指定用户的主工作目录。即用户登录到Linux系统中时默认目录。

Shell当前shell它的值通常是/bin/bash。

查看环境变量方法

echo $环境变量名称

 

和环境变量相关的命令

Echo显示某个环境变量值。

echo $PATH

Export设置一个新的环境变量。

export a

 

更改环境变量

如果想要更改的环境变量永久存在,那么就要在配置文件中更改。

env显示所有环境变量。

Unset清除环境变量。

Set设置本地的shell变量和环境变量。

环境变量的组织方式

  • 环境变量最开始都是在系统的配置文件中的。
  • 登录系统启动一个shell进程操作系统读取用户和系统相关的环境变量的配置文件。
  • 但是自己形成环境变量表,然后由子进程进行读取。
  • 每个程序都会收到一张环境变量表,环境变量表是一个字符串指针数组,每一个指针指向以`/0´结尾的环境字符串。

通过代码如何获取环境变量

 命令行第三个参数

#include <stdio.h>
int main(int argc, char *argv[], char *env[])
{
    int i = 0;
    for(; env[i]; i++)
    {
        printf("%s\n", env[i]);
    }
    return 0;
}

通过第三方变量environ获取 

#include <stdio.h>
int main(int argc, char *argv[])
{
    extern char **environ;
    int i = 0;
    for(; environ[i]; i++)
    {
        printf("%s\n", environ[i]);
    }
    return 0;
}

libc中定义的全局变量,environ指向环境变量表environ没有包含在任何头文件中,所以要使用时要加上extern声明。

通过系统调用获取设置环境变量

#include <stdio.h>
#include <stdlib.h>
int main()
{
    printf("%s\n", getenv("PATH"));
    return 0;
}

常用getenvputenv函数来访问特定的环境变量。 

环境变量通常是具有全局性的

#include <stdio.h>
#include <stdlib.h>
int main()
{
    char * env = getenv("MYENV");
    if(env)
    {
        printf("%s\n", env);
    }
    return 0;
}

环境变量可以被所有bash之后的进程全部看到,所以进全局环境变量具有全局属性。系统的配置信息,尤其是指导性的配置信息环境变量是系统配置起效的一种表现。进程具有独立性,环境变量可以用来进程之间传递数据。

  •  直接查看,发现没有结果,说明该环境变量根本不存在。
  • 导出环境变量
  • export MYENV="hello world" 再次运行程序,发现结果有了!说明环境变量是可以被子进程继承下去的! 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安心学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值