Linux基础4-进程4(环境变量,命令行参数详解)

上篇文章:Linux基础4-进程3(进程优先级,竞争,独立,并行,并发,进程切换)-CSDN博客

本章重点: Linux中环境变量的理解和使用

目录

一. 环境变量概念和查看环境变量

1.1 环境变量概念

1.2 查看环境变量

二. 获取环境变量

2.1 getenv

2.1.1 USER环境变量

2.1.2 PWD环境变量

2.2 通过第三方变量 environ

三. 命令行参数获取环境变量

3.1 argc和argv

3.2 env

 四. 下章重点:程序地址空间


一. 环境变量概念和查看环境变量

1.1 环境变量概念

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

        比如在Linux中,ls,pwd,cd 这些命令可以直接运行。而我们自己写的可执行程序需要./程序名才能执行(即我们要找到这个程序的路径)。

        要执行一个程序,我们首先需要找到它(系统命令由于有环境变量,这些由操作系统指定的参数会在系统启动的时候就被自动运行,环境变量帮助系统命令查找进程所在路径,所以能够直接运行)而我们的命令没有环境变量帮助查找,所以不能直接运行

常见的环境变量有:

PATH:PATH是指定命令的搜索路径,在这个环境变量中的命令可以直接运行(入ls,pwd)

HOME:记录登入用户的家目录,登入系统的时候会通过HOME进入。

SHELL :当前的shell程序

1.2 查看环境变量

env 查看系统的所有环境变量

echo $环境变量名        可以查看具体的环境变量

set        可以查看本地自定义的环境变量和shell变量

export        可以设置一个环境变量,设置的环境变量仅当前有效,用户退出后会消失

unport        取消设置一个环境变量

二. 测试环境变量PATH

使用echo查看PATH,在上面路径的程序都可以直接运行

我们自己创建一个可执行程序,如何不用带路径就能执行??

1 在PATH命令中添加该可执行程序的路径即可

我们使用export将hello放到PATH中

2 将可执行程序放到PATH中的某一个系统默认路径中

二. 获取环境变量

2.1 getenv

        getenv是C语言中的一个函数,可以获取环境变量

#include <stdlib.h> //包含在这个头文件中char *getenv(const char *name);
//返回值是name环境变量所指的值

测试代码:

2.1.1 USER环境变量

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

运行结果,在普通用户中输出其用户名,在root中输出root

这说明了USER这个环境变量的意义:可以唯一标识当前使用Linux的用户

比如我们可以通过USER来确定某人是否有权限

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main()
{const char *who = getenv("USER");if(strcmp(who,"root") == 0){printf("%s!\n", who);}else {printf("权限不足\n");}return 0;
}

运行结果,由于我是YZC,不是root。会显示权限不足

2.1.2 PWD环境变量

系统是如何知道我们在哪一个路径??

系统通过PWD这个环境变量来维护当前路径,当我们切换目录的时候,shell会修改PWD

所以我们可以直接 ls test.c         而不需要 ls ./test.c        因为PWD会帮助ls进行

        我们知道pwd命令可以显示当前路径,我们通过PWD环境变量也可以编写一个C程序来显示当前路径

代码如下:

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

如果把这个指令放到 /bin/user中 就能够相当于我们写了一个pwd指令

2.2 通过第三方变量 environ

使用environ的时候需要 extern char** environ

**的原因:environ指向的是整个环境变量表,这个表中的每一个环境变量又指向相应的路径

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

运行结果如下:

我们通过 if 判断就能够使用相应的环境变量

三. 命令行参数获取环境变量

命令行有三个参数

int main(int argc, char *argv[], char *env[])
{}

其中, argv和env都是指针数组

3.1 argc和argv

我们知道,在linux中输入部分命令的时候我们可以带上参数,如:

ls -a -l -i

其中 argc就代表了参数的个数,agrv[]这个指针数组指向参数解析后的子串(即一张映射表)

如下列代码:

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

通过argc和argv我们可以实现,带入不同的参数执行不同的功能

3.2 env

env为第三个命令行参数,这个参数是存放环境变量的指针数组,我们可以通过env获取环境变量

#include <stdio.h>
#include <stdlib.h>int main(int argc, char *argv[], char *env[])
{for(int i = 0; env[i]; i++)//由于环境变量最后为NULL,所以用env[i]即可控制循环{printf("env[%d] -> %s\n", i, env[i]);}return 0;
}

运行结果如下,可以获取环境变量

 四. 下章重点:程序地址空间

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/467888.html

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

相关文章

【复平面】-复数相乘的几何性质

文章目录 从数学上证明1. 计算乘积 z 1 ⋅ z 2 z_1 \cdot z_2 z1​⋅z2​2. 应用三角恒等式3. 得出结果 从几何角度证明1.给出待乘的复数 u i u_i ui​2.给出任意复数 l l l3.复数 l l l 在不同坐标轴下的表示图 首先说结论&#xff1a; 在复平面中&#xff0c;两个复数&a…

如何将现有VUE项目所有包更新到最新稳定版

更新有风险,Enter要谨慎!!! 要将项目中的所有 npm 包更新到最新稳定版&#xff0c;可以使用 npm-check-updates 工具。以下是具体步骤&#xff1a; 步骤一&#xff1a;安装 npm-check-updates 首先&#xff0c;全局安装 npm-check-updates 工具&#xff1a; npm install -g…

excel常用技能

1.基础技能 1.1 下拉框设置 a. 选中需要设置的列或单元格&#xff0c;数据 ---》 数据验证 b.验证条件 ---> 序列&#xff08;多个值逗号隔开&#xff09; 2.函数 2.1 统计函数-count a.count(区域&#xff0c;区域&#xff0c;......) 统计数量&#xff0c;只针…

(linux驱动学习 - 12). IIC 驱动实验

目录 一.IIC 总线驱动相关结构体与函数 1.i2c_adapter 结构体 2.i2c_algorithm 结构体 3.向系统注册设置好的 i2c_adapter 结构体 - i2c_add_adapter 4.向系统注册设置好的 i2c_adapter 结构体 - i2c_add_numbered_adapter 5.删除 I2C 适配器 - i2c_del_adapter 二.IIC 设…

华为ensp防火墙配置(纯享版)

文章目录 前言一、拓扑结构二、配置步骤1.路由器配置&#xff08;路由器代替互联网&#xff09;2.server和pc配置3.防护墙配置4.测试 总结 前言 防火墙是生活和项目中不可或缺的一部分&#xff0c;本篇文章对华为的ensp防火墙配置做一个总结。在之前的dhcp配置中有软件的下载地…

996引擎 - 活捉NPC

996引擎 - 活捉NPC 引擎触发 - 引擎事件(QF)事件处理模块 GameEvent测试文件参考资料 引擎触发 - 引擎事件(QF) cfg_game_data 配置 ShareNpc1 可以将QM和机器人的触发事件全部转到 QF 引擎触发是通用的,TXT的所有触发转换成小写后在LUA中就可使用,如说明书中缺省可反馈至对接群…

如何借助AI 来提高开发效率

前言 随着人工智能&#xff08;AI&#xff09;技术的快速发展&#xff0c;特别是大规模语言模型&#xff08;如 GPT 系列&#xff09;的崛起&#xff0c;软件开发领域正在经历一场革命。AI 大模型不仅在代码生成方面展现出强大的能力&#xff0c;还在测试、维护和创新等多个环…

QML项目实战:自定义Button

目录 一.添加模块 ​1.QtQuick.Controls 2.1 2.QtGraphicalEffects 1.12 二.自定义Button 1.颜色背景设置 2.设置渐变色背景 3.文本设置 4.点击设置 5.阴影设置 三.效果 1.当enabled为true 2.按钮被点击时 3.当enabled为false 四.代码 一.添加模块 1.QtQuick.Con…

HarmonyOS NEXT应用元服务开发Intents Kit(意图框架服务)本地搜索接入方案

一、方案概述 当用户使用应用/元服务时&#xff0c;开发者可以按照标准意图Schema向系统共享数据&#xff0c;并支持意图调用&#xff08;空调用与传参调用&#xff09;&#xff0c;以实现用户点击卡片后&#xff0c;可后台执行功能&#xff08;例如播放指定歌曲&#xff09;或…

CyclicBarrier使用详解及遇到的坑

上一篇文章讲的是关于是使用CountDownLatch实现生成年底报告遇到的问题&#xff0c;这个计数器和CyclicBarrier也有类似功能&#xff0c;但是应用场景不同。 一、应用场景 CountDownLatch&#xff1a; 有ABCD四个任务&#xff0c;ABC是并行执行,等ABC三个任务都执行完…

k8s-service、endpoints、pod之间是怎么进行网络互通的

k8s-service、endpoints、pod之间是怎么进行网络互通的 1、service2、endpoints3、service、endpoints、pod通信图4、不通服务pod内部间访问 1、service 在K8S中&#xff0c;Service是一种抽象&#xff0c;定义了一组Pod的逻辑集合和访问这些Pod的策略。首先&#xff0c;我们需…

资产管理系统:SpringBoot技术实现

企业资产管理系统 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了企业资产管理系统的开发全过程。通过分析企业资产管理系统方面的不足&#xff0c;创建了一个计算机管理企业资产管理系统的方案。文章介绍了企…

I.MX6U 裸机开发5.准备C环境并用C语言控制LED

I.MX6U 裸机开发5.准备C环境并用C语言控制LED 一、C运行环境1. 设置处理器模式2. CPSR 寄存器CPSR 寄存器结构模式位MRS 指令MSR 指令 3. 设置SP指针设置 SP 指针示例 保存和恢复 SP 指针示例 4. 跳转到C语言 二、程序编写1. 启动文件 start.S2. main.h 定义寄存器3. 主程序mai…

c++设计模式demo

模式设计原则 依赖倒置原则 ⾼层模块不应该依赖低层模块&#xff0c;⼆者都应该依赖抽象 &#xff1b; 抽象不应该依赖具体实现&#xff0c;具体实现应该依赖于抽象&#xff1b; ⾃动驾驶系统公司是⾼层&#xff0c;汽⻋⽣产⼚商为低层&#xff0c;它们不应该互相依赖&#x…

【go从零单排】泛型(Generics)、链表

&#x1f308;Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 &#x1f4d7;概念 在Go语言中&#xff0c;泛型&#xff08;Generics&#xff09;允许你编写可以处理…

Web前端开发--HTML语言

文章目录 前言1.介绍2.组成3.基本框架4.常见标签4.1双标签4.1.1.标题标签4.2.2段落标签4.1.3文本格式化标签4.1.4超链接标签4.1.5视频标签4.1.6 音频标签 4.2单标签4.2.1换行标签和水平线标签4.2.2 图像标签 5.表单控件结语 前言 生活中处处都有网站&#xff0c;无论你是学习爬…

数据结构-图的概念

不存在空图现象,顶点集不能为空,边集可以为空 研究链接一个顶点的边有多少条非常有意义 无向图的度边的二倍 有向图的入度出度,度边数 有向图一致 重点 子图必须联通,尽可能多的边和结点 对于一个生成树,他有n个节点就有n-1条边 修路问题将各个村庄相连,由于经费有限,只能选择…

TDengine 签约蘑菇物联,改造通用设备工业互联网平台

在当前工业互联网迅猛发展的背景下&#xff0c;企业面临着日益增长的数据处理需求和智能化转型的挑战。通用工业设备的高能耗问题愈发突出&#xff0c;尤其是由这些设备组成的公辅能源车间&#xff0c;亟需更高效的解决方案来提升设备运行效率&#xff0c;降低能源消耗。为此&a…

LSM-TREE和SSTable

一、什么是LSM-TREE LSM Tree 是一种高效的写优化数据结构&#xff0c;专门用于处理大量写入操作 在一些写多读少的场景&#xff0c;为了加快写磁盘的速度&#xff0c;提出使用日志文件追加顺序写&#xff0c;加快写的速度&#xff0c;减少随机读写。但是日志文件只能遍历查询…

vue3使用easy-player播放hls监控流

easy-player未发布在npm上&#xff0c;只能采用静态引入方式&#xff0c;老版本不支持v3 1. 在public文件夹下放入EasyPlayer-element.min.js 和 EasyPlayer.wasm 文件 2. 在根目录index.html引入 这样在vue文件中可以使用easy-player 标签 附件