【Linux系统编程】—— 深入理解Linux中的环境变量与程序地址空间
文章目录
- 环境变量
- 常见的环境变量
- 查看环境变量
- 环境变量的修改与使用
- 环境变量的组织⽅式
- 环境变量的命令
- 通过代码如何获取环境变量
- 环境变量的继承
前言:在Linux系统中,环境变量和程序地址空间是系统管理和进程运行的重要组成部分。本文将详细探讨环境变量的作用、如何查看和操作环境变量,并深入了解Linux进程的地址空间及其虚拟内存管理机制。
环境变量
基本概念:
环境变量是操作系统用来指定程序运行环境的参数。它们通常以键值对的形式存储在操作系统中。程序在启动时,系统会将这些环境变量传递给它们。通过环境变量,程序能够获得一些必要的运行信息,如路径、用户名、主目录等。
在开发过程中,我们经常利用环境变量来简化操作。例如,C/C++编译时,如果某些库的路径已被设置为环境变量,编译器就能自动找到它们,而不需要手动指定路径。
常见的环境变量
- PATH:指定命令的搜索路径。操作系统根据此变量查找可执行文件。
- HOME:指定用户的主工作目录,即用户登录后默认的目录。
- SHELL:当前Shell的类型,通常是/bin/bash。
查看环境变量
你可以使用echo命令来查看环境变量的值:
echo $NAME
例如,要查看PATH变量:
echo $PATH

环境变量的修改与使用
- 修改PATH:假设你编写了一个C程序并生成了hello可执行文件。通常我们需要带上路径才能执行程序,但你可以通过修改环境变量PATH,使得程序路径自动被查找:
export PATH=$PATH:/path/to/your/program
这样,你就可以直接通过hello命令运行程序,而无需指定完整路径。
- 设置环境变量:通过export命令设置新的环境变量:
export MYENV="Hello World"
在程序中,你可以使用getenv(“MYENV”)来访问该环境变量。
环境变量的组织⽅式

每个程序都会收到⼀张环境表,环境表是⼀个字符指针数组,每个指针指向⼀个以’\0’结尾的环境字符串
环境变量的命令
- echo:显示环境变量的值。
- export:设置环境变量。
- env:显示所有环境变量。
- unset:清除环境变量。
- set:显示本地定义的Shell变量和环境变量。
通过代码如何获取环境变量
- 通过C代码,我们可以访问和修改环境变量。例如,利用getenv函数获取环境变量:
#include <stdio.h>
#include <stdlib.h>int main()
{printf("%s\n", getenv("PATH"));return 0;
}
//这个程序会打印出当前的PATH变量的值。
- 命令⾏第三个参数
#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()
{char *env = getenv("MYENV");if(env){printf("%s\n", env);}return 0;
}
直接查看,发现没有结果,说明该环境变量根本不存在
- 导出环境变量
export MYENV=“hello world”
再次运⾏程序,发现结果有了!说明:环境变量是可以被⼦进程继承下去的!
相关文章:
【Linux系统编程】—— 深入理解Linux中的环境变量与程序地址空间
文章目录 环境变量常见的环境变量查看环境变量环境变量的修改与使用环境变量的组织⽅式环境变量的命令通过代码如何获取环境变量环境变量的继承 前言:在Linux系统中,环境变量和程序地址空间是系统管理和进程运行的重要组成部分。本文将详细探讨环境变量的…...
Spark常见面试题-部分待更新
1. 简述hadoop 和 spark 的不同点(为什么spark更快) Hadoop是一个分布式管理、存储、计算的生态系统,包括HDFS(分布式文件系统)、MapReduce(计算引擎)和YARN(资源调度器)…...
Android BitmapShader实现狙击瞄具十字交叉线准星,Kotlin
Android BitmapShader实现狙击瞄具十字交叉线准星,Kotlin <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.…...
linux通过web向mac远程传输字符串,mac收到后在终端中直接打印。
要通过Web从Linux向Mac远程传输字符串,并在Mac的终端中直接打印,可以使用以下方法。这里假设Linux作为服务器,Mac作为客户端。 方法 1:使用Python的HTTP服务器 在Linux上启动一个简单的HTTP服务器,Mac通过curl获取字符…...
海云安开发者安全智能助手D10荣膺 “ AI标杆产品 ” 称号,首席科学家齐大伟博士入选2024年度 “ 十大杰出青年 ”
2024年12月27日,粤港澳大湾区AI领袖峰会在深圳成功举办,大会表彰了在人工智能技术创新、应用实践和产业发展等方面取得优异成绩的企业和个人,深圳海云安网络安全技术有限公司开发者安全智能助手D10荣膺“AI标杆产品”称号。同时,公…...
Spring Boot + Apache POI 实现 Excel 导出:BOM物料清单生成器(支持中文文件名、样式美化、数据合并)
目录 引言 Apache POI操作Excel的实用技巧 1.合并单元格操作 2.设置单元格样式 1. 创建样式对象 2. 设置边框 3. 设置底色 4. 设置对齐方式 5. 设置字体样式 6.设置自动换行 7. 应用样式到单元格 3. 定位和操作指定单元格 4.实现标签-值的形式 5.列宽设置 1. 设…...
ReactiveSwift 简单使用
记录 ReactiveSwift 简单使用 导入 ReactiveSwift 库创建 TestViewModel 文件 enum JKTypeType: Int {case cloudcase devicecase weater }// 通过监听属性变化 class TestViewModel: NSObject {lazy var recordType: Property<JKTypeType> {return Property(recordTy…...
CSS 的基础知识及应用
前言 CSS(层叠样式表)是网页设计和开发中不可或缺的一部分。它用于描述网页的视觉表现,使页面不仅实现功能,还能提供吸引人的用户体验。本文将介绍 CSS 的基本概念、语法、选择器及其在提升网页美观性方面的重要性。 什么是 CSS&…...
【Web】2025西湖论剑·中国杭州网络安全安全技能大赛题解(全)
目录 Rank-l Rank-U sqli or not Rank-l username存在报错回显,发现可以打SSTI 本地起一个服务,折半查找fuzz黑名单,不断扔给fenjing去迭代改payload from flask import Flask, request, render_template_stringapp Flask(__name__)app…...
能源物联网数据采集设备 串口服务器功能参数介绍
摘要 随着物联网技术的快速发展,各种传统设备的联网需求愈发迫切。串口服务器作为一种桥接传统串口设备与现代网络的关键设备,在工业控制、智能电网、交通运输等域发挥了重要作用。本文以APort100串口服务器为例,探讨串口服务器在现代物联…...
在线json格式化工具
在线json格式化工具,包括中文和英文版本,无需登录,无需费用,用完就走。 官网地址: https://json.openai2025.com 效果如下:...
OSPF的LSA的学习研究
OSPF常见1、2、3、4、5、7类LSA的研究 1、拓扑如图,按照地址表配置,激活OSPF划分相关区域并宣告相关网段 2、1类LSA,每台运行了OSPF的路由器都会产生,描述了路由器的直连接口状况和cost 可以看到R1产生了一条router lsa࿰…...
1166 Summit (25)
A summit (峰会) is a meeting of heads of state or government. Arranging the rest areas for the summit is not a simple job. The ideal arrangement of one area is to invite those heads so that everyone is a direct friend of everyone. Now given a set of tenta…...
AUTOSAR从入门到精通-【自动驾驶】高精地图(四)
目录 前言 现状概述 算法原理 高精地图的构成 A.基础地图层 B.几何地图层 C.语义地图层 D.道路连接层 E.先验地图层 F.实时地图数据 高精地图的构建及维护 移动建图系统 高精地图维护 A.地图变换检测 B.地图数据更新 3. 众包建图 3.1 众包建图的优劣势 3.2 众包起源:M…...
MySQL8数据库全攻略:版本特性、下载、安装、卸载与管理工具详解
大家好,我是袁庭新。 MySQL作为企业项目中的主流数据库,其5.x和8.x版本尤为常用。本文将详细介绍MySQL 8.x的特性、下载、安装、服务管理、卸载及管理工具,旨在帮助用户更好地掌握和使用MySQL数据库。 1.MySQL版本及下载 企业项目中使用的…...
网络安全---CMS指纹信息实战
CMS简介 CMS(Content Management System)指的是内容管理系统,如WordPress、Joomla等。CMS系统非常常见,几乎所有大型网站都使用CMS来管理其网站的内容。由于常见CMS的漏洞较多,因此黑客将不断尝试利用这些漏洞攻击CMS…...
基于C#实现对象序列化的3种方案
大家好!我是付工。 在上位机开发过程中,我们可能经常要实现一个数据对象的持久化,将对象保存到具体的文件中,今天给大家介绍常用的3种方案,大家根据实际情况,选择适合的方案。 一、准备工作 在介绍这4种…...
蓝桥杯真题 - 公因数匹配 - 题解
题目链接:https://www.lanqiao.cn/problems/3525/learning/ 个人评价:难度 2 星(满星:5) 前置知识:调和级数 整体思路 题目描述不严谨,没说在无解的情况下要输出什么(比如 n n n …...
使用 Java 实现基于 DFA 算法的敏感词检测
使用 Java 实现基于 DFA 算法的敏感词检测 1. 引言 敏感词检测在内容审核、信息过滤等领域有着广泛的应用。本文将介绍如何使用 DFA(Deterministic Finite Automaton,确定有限状态自动机) 算法,在 Java 中实现高效的敏感词检测。…...
Jenkins-Pipeline简述
一. 什么是Jenkins pipeline: pipeline在jenkins中是一套插件,主要功能在于,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程。Pipeline的实现方式是一套Groovy DSL,任何发布流程…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...
