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.mzph.cn/diannao/55529.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初识算法 · 滑动窗口(1)

目录 前言&#xff1a; 长度最小的子数组 题目解析 算法原理 算法编写 无重复长度的最小字符串 题目解析 算法原理 算法编写 前言&#xff1a; 本文开始&#xff0c;介绍的是滑动窗口算法类型的题目&#xff0c;滑动窗口本质上其实也是双指针&#xff0c;但是呢&#…

HTB:Preignition[WriteUP]

连接至HTB服务器并启动靶机 靶机IP&#xff1a;10.129.157.49 分配IP&#xff1a;10.10.16.12 1.Directory Brute-forcing is a technique used to check a lot of paths on a web server to find hidden pages. Which is another name for this? (i) Local File Inclusion, (…

基于VirtualBox和Ubuntu的虚拟环境搭建

VirtualBox简介 VirtualBox 是一款开源虚拟机软件。 是由德国 Innotek 公司开发&#xff0c;由Sun Microsystems公司出品的软件&#xff0c;使用Qt编写&#xff0c;在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。简单易用&#xff0c;可虚拟的系统包括Windows&…

【网路通信基础与实践番外二】TCP协议的流量控制和拥塞控制以及二者区别和例题

TCP协议是端对端的协议&#xff0c;因此在数据进行传输的过程受发送方&#xff0c;数据通道&#xff0c;接收方三方状态的影响。我们用水龙头来比喻数据发送方&#xff0c;水管来比喻数据通道&#xff0c;水桶来表示数据接收方。 图(a)表示水桶太小&#xff0c;来不及接受注入…

超好用的element的el-pagination分页组件二次封装-附源码及讲解

前言&#xff1a;在很多后台管理系统开发时总会有很多分页组件的使用&#xff0c;如果我们每次都用elementui官网的el-pagination去写的话&#xff0c;调整所有分页的样式就会很麻烦&#xff0c;而且页面内容也会很累赘繁琐。 讲解一个我经常使用的二次封装el-pagination组件&…

归并排序:递归、非递归实现、文件排序(归并排序实现)

目录 归并排序递归实现 1.归并排序基本思想 2.归并排序单趟思路 3.代码思路步骤 3.1.归并排序实现思路步骤 3.2.总结 3.2.1.数组归并与链表归并的差异 (1)数组归并 (2)链表归并 (3)总结 3.2.2.归并排序的递归实现总结 4.归并排序递归实现代码 5.归并排序递归递归展…

使用百度文心智能体创建多风格表情包设计助手

文章目录 一、智能定制&#xff0c;个性飞扬二、多元风格&#xff0c;创意无限 百度文心智能体平台为你开启。百度文心智能体平台&#xff0c;创建属于自己的智能体应用。百度文心智能体平台是百度旗下的智能AI平台&#xff0c;集成了先进的自然语言处理技术和人工智能技术&…

全面指南:探索并实施解决Windows系统中“mfc140u.dll丢失”的解决方法

当你的电脑出现mfc140u.dll丢失的问题是什么情况呢&#xff1f;mfc140u.dll文件依赖了什么&#xff1f;mfc140u.dll丢失会导致电脑出现什么情况&#xff1f;今天这篇文章就和大家聊聊mfc140u.dll丢失的解决办法。希望能够有效的帮助你解决这问题。 哪些程序依赖mfc140u.dll文件…

【Spring基础3】- Spring的入门程序

目录 3-1 Spring的下载3-2 Spring的 jar 包3-3 第一个 Spring程序第一步&#xff1a;添加spring context的依赖&#xff0c;pom.xml配置如下第二步&#xff1a;添加junit依赖第三步&#xff1a;定义bean&#xff1a;User第四步&#xff1a;编写spring的配置文件&#xff1a;bea…

AI相关的整理

AI相关的整理 初体验记不住机器学习如何部署如何微调 整理AI学习&#xff0c;AI小白&#xff0c;业余爱好。持续更新&#xff0c;谨慎参考&#xff01; 初体验 试了一下本地直接下载安装ollama和open-webui&#xff0c;然后运行指定的模型&#xff0c;跟着文档做&#xff0c;很…

MFC多媒体定时器实例(源码下载)

用MFC多媒体定时器做一个每1秒钟加一次的计时器&#xff0c;点开始计时按钮开始计时&#xff0c;点关闭计时按钮关闭计时。 1、在库文件Med_timeDlg.h文件中添加代码 class CMed_timeDlg : public CDialog { // Construction public:CMed_timeDlg(CWnd* pParent NULL); // st…

算法 | 位运算(哈希思想)

位运算 &与两个位都为1时&#xff0c;结果才为1&#xff08;有0为0&#xff09;|或两个位都为0时&#xff0c;结果才为0&#xff08;有1为1&#xff09;^异或两个位相同为0&#xff0c;相异为1~取反0变1&#xff0c;1变0<<左移各二进位全部左移若干位&#xff0c;高…

[MAUI]数据绑定和MVVM:MVVM的属性验证

一、MVVM的属性验证案例 Toolkit.Mvvm框架中的ObservableValidator类,提供了属性验证功能,可以使用我们熟悉的验证特性对属性的值进行验证,并将错误属性提取和反馈给UI层。以下案例实现对UI层的姓名和年龄两个输入框,进行表单提交验证。实现效果如下所示 View<ContentP…

初阶C语言-指针

1.指针是什么&#xff1f; 理解指针的两个要点&#xff1a; 1.指针是内存中一个最小单元的编号&#xff0c;也就是地址 2.口头语中说的指针&#xff0c;通常是指指针变量&#xff0c;是用来存放内存地址的变量 总结&#xff1a;指针就是地址&#xff0c;口语中说的指针通常是指…

双指针_有效三角形个数三数之和四数之和

有效三角形个数 思路&#xff1a; 我们可以通过暴力枚举&#xff0c;三重for循环来算但&#xff0c;时间复杂度过高。 有没有效率更高的算法呢&#xff1f; 我们知道如果两条较短的边小于最长的一条边&#xff0c;那么就可以构成三角形。 如果这个数组是升序的&#xff0c;两…

python交互式命令时如何清除

在交互模式中使用Python&#xff0c;如果要清屏&#xff0c;可以import os&#xff0c;通过os.system()来调用系统命令clear或者cls来实现清屏。 [python] view plain copy print? >>> import os >>> os.system(clear) 但是此时shell中的状态是&#xff1a;…

鼓组编写:SsdSample鼓映射 GM Map 自动保存 互换midi位置 风格模板 逻辑编辑器

SsdSample音源的键位映射 方便编写鼓的技巧 可以这样去设置键位关系的面板和钢琴卷帘窗的面板&#xff0c;方便去写鼓。 可以先按GM的midi标准去写鼓&#xff0c;然后比对下鼓的键位映射的关系&#xff0c;去调整鼓。 可以边看自己发b站等处的图文笔记&#xff0c;然后边用电…

CTFshow 命令执行 web29~web36(正则匹配绕过)

目录 web29 方法一&#xff1a;include伪协议包含文件读取 方法二&#xff1a;写入文件 方法三&#xff1a;通识符 web30 方法一&#xff1a;filter伪协议文件包含读取 方法二&#xff1a;命令执行函数绕过 方法三&#xff1a;写入文件 web31 方法一&#xff1a;filter伪…

基于Springboot+Vue的零食批发商仓库管理系统(含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 在这个…

Open-Sora全面开源?

来源 | 机器之心 ID | almosthuman2014 不久前 OpenAI Sora 以其惊人的视频生成效果迅速走红&#xff0c;在一众文生视频模型中突出重围&#xff0c;成为全球瞩目的焦点。继 2 周前推出成本直降 46% 的 Sora 训练推理复现流程后&#xff0c;Colossal-AI 团队全面开源全球首个类…