当前位置: 首页 > news >正文

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" 再次运行程序,发现结果有了!说明环境变量是可以被子进程继承下去的! 
http://www.lryc.cn/news/454457.html

相关文章:

  • 163页PPT罗兰贝格品牌战略升级:华为案例启示与电器集团转型之路
  • 系统设计,如何设计一个秒杀功能
  • Linux:进程入门(进程与程序的区别,进程的标识符,fork函数创建多进程)
  • 索尼MDR-M1:超宽频的音频盛宴,打造沉浸式音乐体验
  • 【Linux】线程的概念
  • centos7.9环境下mysql8数据库双机互备环境部署
  • git 报错git: ‘remote-https‘ is not a git command. See ‘git --help‘.
  • mysql学习教程,从入门到精通,SQL GROUP BY 子句(31)
  • pip 和 conda 的安装区别
  • 大学生就业招聘:Spring Boot系统的架构分析
  • 线段树模板
  • 【TypeScript】知识点梳理(三)
  • 题解:SP1741 TETRIS3D - Tetris 3D
  • EWSTM8 IAR for STM8 软件分享
  • 非机动车检测数据集 4类 5500张 电动三轮自行车 voc yolo
  • Chromium 中JavaScript FileReader API接口c++代码实现
  • k8s 中微服务之 MetailLB 搭配 ingress-nginx 实现七层负载
  • 南昌网站建设让你的企业网站更具竞争力
  • 【重学 MySQL】五十三、MySQL数据类型概述和字符集设置
  • 《计算机原理与系统结构》学习系列——计算机的算数运算(上)
  • 如何在华为云服务器查看IP地址,及修改服务器登录密码!!!
  • JAVA并发编程高级——JDK 新增的原子操作类 LongAdder
  • 常见的基础系统
  • 在 window 系统下安装 Ubuntu (虚拟机)
  • 鸿蒙开发(NEXT/API 12)【访问控制应用权限管控概述】程序访问控制
  • (10)MATLAB莱斯(Rician)衰落信道仿真1
  • 什么是重卡充电桩?
  • 模拟实现消息队列(基于SpringBoot实现)
  • C语言:预编译过程的剖析
  • 算法——单调栈