Linux中的环境变量及main函数参数详解

目录

Linux中的环境变量

常见环境变量 PATH :

和环境变量相关的命令

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

getenv

putenv

新增环境变量

进程切换:

main函数参数

命令行参数


Linux中的环境变量

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

常见环境变量 PATH :

指定命令的搜索路径 HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录) SHELL : 当前Shell,它的值通常是/bin/bash

which ls
/usr/bin/ls
zhangsan@ubuntu:~/practice-using-ubuntu/20240920$ file /usr/bin/ls
/usr/bin/ls: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=2f15ad836be3339dec0e2e6a3c637e08e48aacbd, for GNU/Linux 3.2.0, stripped

echo $PATH(系统的默认(维护可执行程序)搜索路径)
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

只有在PATH下的程序才能被直接执行。

查看主机名和用户名

zhangsan@ubuntu:~$ echo $LOGNAME
zhangsan
zhangsan@ubuntu:~$ echo $HOSTNAME
ubuntu

和环境变量相关的命令

1. echo: 显示某个环境变量值

2. export: 设置一个新的环境变量

export xxx
export VAL="xxx"

将本地变量设为环境变量

3. env: 显示所有环境变量

env | grep myval

过滤出指定的环境变量

4. unset: 清除环境变量-> 需要一定的时间

5. set: 显示本地定义的shell变量和环境变量

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

getenv

SYNOPSIS
       #include <stdlib.h>

       char *getenv(const char *name);

#include<stdio.h>
#include<stdlib.h>#define USER "USER"
int main()
{char* who=getenv(USER);printf("user: %s\n",who);return 0;
}

 user环境变量最大的意义是,可以标识当前使用Linux的用户。

#define USER "USER"
#define MY_ENV "myval"
int main()
{char* myenv=getenv(MY_ENV);if(NULL==myenv){printf("%s,not found\n",MY_ENV);}printf("%s=%s\n",MY_ENV,myenv);//printf("user: %s\n",who);return 0;
}

可以观察export  myval 前后的效果。

环境变量本来是定义给bash的,但会被子进程继承下去。->为了适应不同的应用场景。‘’

本地变量只会在当前进程(bash)内有效。

环境变量中有空格时应加上" "

环境变量是在bash内维护的,环境变量变化时,Shell会自动调整PWD的值。

#define MYPWD "PWD"
printf("%s\n",getenv(MYPWD));

putenv

更改或添加环境变量。

新增环境变量

export PATH=$PATH:/xx/xx/xx/xx

进程切换:

进程切换指的是要进行进程上下文的保护,当进程在恢复运行的时候要进行上下文保护(保护的是寄存器里的数据而不是寄存器本身)。

在任何时刻,寄存器里的数据,只是属于当前进程,寄存器被所有进程共享,但是进程里的数据,是每个进程各自私有的上下文数据

cd ~  
cd $HOME

 ~最终会被解释为HOME环境变量。

main函数参数

命令行参数

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

argc:程序名+参数个数

argv:程序名+参数 

argv数组通常以null结束。

env:中存环境变量,最后同样以NULL结尾。

printf("%s\n",getenv("PATH"));

SYNOPSIS
       extern char **environ;

for(int i=0;__environ[i];++i)printf("%d:%s\n",i,*(__environ+i));

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

面试速通宝典——1

1. 内存有哪几种类型&#xff1f; ‌‌‌‌  内存分为五个区&#xff0c;堆&#xff08;malloc&#xff09;、栈&#xff08;如局部变量、函数参数&#xff09;、程序代码区&#xff08;存放二进制代码&#xff09;、全局/静态存储区&#xff08;全局变量、static变量&#…

GNU链接器(LD):什么是符号?符号定义及实例解析

0 参考资料 GNU-LD-v2.30-中文手册.pdf GNU linker.pdf1 前言 一个完整的编译工具链应该包含以下4个部分&#xff1a; &#xff08;1&#xff09;编译器 &#xff08;2&#xff09;汇编器 &#xff08;3&#xff09;链接器 &#xff08;4&#xff09;lib库 在GNU工具链中&…

手动实现逻辑回归算法(LogisticRegression)

目录 1. 前言 2. 示例 3. 原理介绍 4. 实验代码 1. 前言 逻辑回归是一种解决分类问题的算法 值得注意的是&#xff0c;在机器学习中&#xff0c;回归指的是连续型数据的预测问题。而这里的逻辑回归特指分类任务&#xff0c;比如判断一个人是否患病、是否健康等等 逻辑回归…

nodejs基于vue+express度假村旅游管理系统设计与实现7t82p

目录 功能介绍数据库设计具体实现截图技术栈技术论证解决的思路论文目录核心代码风格详细视频演示源码获取 功能介绍 实现了一个完整的农家乐系统&#xff0c;其中主要有用户表模块、关于我们模块、收藏表模块、公告信息模块、酒店预订模块、酒店信息模块、景区信息模块、景区…

ARM(Day 2)

一、作业 &#xff08;1&#xff09;汇编代码 .text.globl _start_start:mov r0, #0x5mov r1, #0x10比较r0,r1 是否相等 相等执行stop 不相等执行下一步比较&#xff08; r0 > r1 ?&#xff09;cmp r0, r1 比较实际在做减法 (YES NO )subhi r0, r0, r1 r0 > r1 …

VLDB 2024 圆桌会议回顾:展望物联网与 AI 时代的时序数据库

回顾我们在 VLDB 2024 8 月 26 日至 8 月 30 日&#xff0c;数据库领域的顶级国际会议 VLDB 2024 在广州举行。IoTDB 最新研发成果的三篇论文被本次大会录用&#xff08;详见&#xff1a;IoTDB 在顶级会议 VLDB 2024&#xff1a;四篇最新论文入选&#xff0c;特邀做 TPC 报告与…

MySQL篇(存储过程 触发器 存储函数)(持续更新迭代)

目录 一、存储过程 1. 简介 2. 特点 3. 语法 3.1. 创建 3.2. 调用 3.3. 查看 3.4. 删除 4. 示例 二、变量 1. 简介 2. 系统变量 2.1. 查看系统变量 2.2. 设置系统变量 2.3. 演示示例 3. 用户定义变量 3.1. 赋值 方式一 方式二 3.2. 使用 3.3. 演示示例 4.…

计算机组成原理——存储系统

计算机组成原理——存储系统 存储器层次结构 存储器层次结构如下&#xff1a; 寄存器&#xff08;CPU&#xff09;Cache&#xff08;高速缓冲存储器&#xff09;主存磁盘磁带、光盘等 按照上述层次结构&#xff0c;自下而上速度依次增快、容量相对依次渐小、造价越来越高昂…

vitis2022.2生成动态设备树

打开vitis 点击xilinx 点击generate Device Tree 导入硬件描述文件&#xff0c;以及指定输出目录 再点击Modify Device Tree Settings 修改device_tree下的dt_overlay 修改后点击ok 最后点击generate即可

每日学习一个数据结构-Trie树(字典树)

文章目录 定义节点结构根节点插入操作查找操作删除操作特点应用示例 “Trie”树&#xff0c;又称为前缀树或字典树&#xff0c;是一种专门用于存储字符串的数据结构。它在许多应用程序中都非常有用&#xff0c;特别是在那些需要高效查找、插入和删除字符串的应用场景中。下面是…

网络通信——路由器、交换机、集线器(HUB)

注意&#xff1a;传输层&#xff0c;应用层没有网路设备 一.路由器&#xff08;网络层设备&#xff09; 1.分割广播域 2.一个接口就是一个广播域 3.一般接口位4&#xff0c;8&#xff0c;12。 4.数据转发 &#xff08;由路由表转发数据&#xff09; 5.根据路由表来进行路径选…

MySQL连接查询解析与性能优化成本

文章目录 一、连接查询1.连接查询基础1. INNER JOIN内连接2. LEFT JOIN (或 LEFT OUTER JOIN)左外连接3. RIGHT JOIN (或 RIGHT OUTER JOIN)右外连接4. FULL OUTER JOIN 2.连接查询的两种过滤条件3.连接的原理 二、性能优化成本1.基于成本的优化2.调节成本常数(1)mysql.server_…

【最基础最直观的排序 —— 冒泡排序算法】

最基础最直观的排序 —— 冒泡排序算法 冒泡排序&#xff08;Bubble Sort&#xff09;是一种计算机科学领域的较简单的排序算法&#xff0c;属于交换排序。其基本思想是在待排序的一组数中&#xff0c;将相邻的两个数进行比较&#xff0c;若前面的数比后面的数大就交换两数&am…

【C++】继承(上)

个人主页~ 继承 一、继承的概念以及定义1、继承的概念2、继承的定义&#xff08;1&#xff09;定义格式&#xff08;2&#xff09;继承基类成员访问方式的变化 二、基类和派生类对象赋值转换三、继承中的作用域 一、继承的概念以及定义 1、继承的概念 继承机制是面向对象程序…

Java集合(Map篇)

一.Map a.使用Map i.键值&#xff08;key-value&#xff09;映射表的数据结构&#xff0c;能高效通过key快速查找value&#xff08;元素&#xff09;。 ii.Map是一个接口&#xff0c;最常用的实现类是HashMap。 iii.重复放入k-v不会有问题&#xff0c;但是一个…

周邦彦,北宋文坛的独特乐章

周邦彦&#xff0c;字美成&#xff0c;号清真居士&#xff0c;生于北宋仁宗嘉祐元年&#xff08;公元1056年&#xff09;&#xff0c;卒于北宋徽宗宣和三年&#xff08;公元1121年&#xff09;&#xff0c;享年65岁。他是宋代“婉约派”词人的代表之一&#xff0c;与柳永、晏几…

java日志框架之Log4j

文章目录 一、Log4j简介二、Log4j组件介绍1、Loggers (日志记录器)2、Appenders&#xff08;输出控制器&#xff09;3、Layout&#xff08;日志格式化器&#xff09; 三、Log4j快速入门四、Log4j自定义配置文件输出日志1、输出到控制台2、输出到文件3、输出到数据库 五、Log4j自…

comp 9517 Computer Vision week1

本篇博文为课堂笔记&#xff0c;因为英语不好现在不得不课下看录像复习一遍 颜色模型 RGBHSVYCbCrL\*a\*b RGB 有红、绿、蓝三通道 problem&#xff1a;不同通道之间高度相关&#xff0c;包含同种信息 如果想要紧凑的(as compactly as possible)存储图像RGB不合适&#xff0c;…

[DRAM Test]内存测试维修工具大全

目录 1、《HCI MemTest, RunMemtestPro》 2、《MEMTEST64》 3、AIDA64稳定性测试 4、《MEMTEST86》与《MEMTEST86》 5、Windows Memory Diagnostic Tool(微软内存诊断工具) 6、《RAM STRESS TEST》 7、《AMT64和AMT128》 8、《DocMemory》 9、《RAMFIX V110516B》 10…

word如何快速打开文档中的网址超链接?

1、鼠标放在文档中超链接上&#xff1a; 2、然后左手按住【CTRL】键&#xff0c;之后鼠标光标会变成一个手形&#xff0c; 然后右手&#xff0c;点击鼠标左键&#xff0c;即可快速使用电脑当前设置的默认浏览器打开并跳转到网址&#xff1a;