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

网站建设新闻发布注意什么/荥阳seo

网站建设新闻发布注意什么,荥阳seo,wordpress导入img文件方法,网站内容营销目录 获取环境变量的后两种方法 环境变量具有全局属性 内建命令 和环境变量相关的命令 c语言访问地址 重新理解地址 地址空间 获取环境变量的后两种方法 main函数的第三个参数 :char* env[ ] 也是一个指针数组,我们可以把它的内容打印出来看看。 …

目录

获取环境变量的后两种方法

环境变量具有全局属性

内建命令

和环境变量相关的命令

c语言访问地址

重新理解地址

地址空间


获取环境变量的后两种方法

main函数的第三个参数 :char* env[ ]

也是一个指针数组,我们可以把它的内容打印出来看看。

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

我们再把pid也打印出来看看:

输入命令:

!man getpid

我们把这两个头文件加上

  #include<stdio.h>    #include<stdlib.h>    #include<string.h>    #include<sys/types.h>    
E>#include<unistd.h>                                                                                            
E>int main(int argc,char* argv,char* env[])    {                                         int i=0;                              for(; env[i];i++)                                       {                                                                       
E>        printf("pid:%d,env[%d]:%s\n",getpid(),i,env[i]);                     }  return 0;
}

 就可以把我们的此程序的环境变量打印出来:

这个获取环境变量的方法和我们输入"env"命令获取的环境变量是一样的:

我们之前说过如果我们把PATH置空,很多系统命令都用不了了:

但是我们重启xshell之后就又可以用了。这是因为我们置空的是加载进内存的PATH。

我们重启之后系统解释器会重新读取环境变量表,形成新的环境变量,环境变量是脚本配置文件的形式存在的的。

在家目录下有个隐藏文件,bash_profile.

环境变量表就在这个文件里面。

假设我们自己写一个环境变量,

然后用env调用环境变量,通过管道只打印我们自己写的环境变量,显示找不到:

这是因为我们写的环境变量并没有被加载进环境变量表。

我们可以通过 "export"命令把我们写的环境变量加载进环境变量表里面,再通过env打印就可以打印出来了。

但是我们重启xshell之后我们配置的这个环境变量仍然会消失不见。只有当我们去家目录下面的bash_profile文件下写入我们的环境变量才能再次重启之后仍然会存在。

vim ~/.bash_profile

此刻我们就可以把我们自定义的变量打印出来看看:

假如我们不想给main函数传参呢?

有个外部变量叫   environ

 它指向了char * env[ ]

 我们把environ打印出来,main函数不带参照样可以把环境变量打印出来。

 
int main()    
{    extern char** environ;    int i=0;                                                                                                     for(;environ[i];i++)    {    printf("%d,%s",i,environ[i]);    }    return 0;
}

到目前为止,我们获取环境变量的方法有:

main函数传参         getenv[  ]                 char** environ[  ] 

环境变量具有全局属性

我们在我们将才的进程里再写个子进程,看它能获取我们子进程的环境变量吗

#include<stdio.h>                                                  #include<stdlib.h>                                                 
#include<string.h>                                                 
#include<sys/types.h>                                              
#include<unistd.h>                                                 int main()                                                         
{                                                                  pid_t id=fork();                                               if(id==0)                                                      {                                                              extern char** environ;                                         int i=0;                                                       for(;environ[i];i++)                                           {                                                              printf("%d,%s",i,environ[i]);                              }                                                              }                                                              sleep(3);         return 0;
}

 照样可以,这也证明了环境变量具有全局属性。

我们自定一个本地变量

OUR_ENV=333

 然后我们再把这个本地变量打印出来

 #include<stdio.h>    #include<stdlib.h>    #include<string.h>    #include<sys/types.h>    #include<unistd.h>    int main()    {                                                                                                              
printf("OUR_ENV_ENV:%S\n",getenv("OUR_ENV"));return 0;
}

 注意:因为是子进程,所以我们没export的时候子进程获取不到我们自定义的本地变量,会显示为null

当我们export把我们定义的环境变量载入bash之后,让它成为环境变量,环境变量具有全局性,子进程就可以获取到了:

内建命令

我们再写几个本地变量:

我们发现,a,b都为本地变量,echo是一个子进程,但是可以直接打印本地变量 a,b,这是为什么?

再比如,我们把PATH置空,这时候ls,touch这种命令都用不了了,但是echo还可以用

这是因为echo是shell的内置函数,这种命令叫做linux的内建命令。

内建命令不创建子进程。

和环境变量相关的命令

 set:

把本地变量和环境变量全部打印出来:

set | grep+本地变量名功能:打印本地变量

c语言访问地址

程序的地址空间遵守的就是下面这张图:

我们把这各个区的存的值的地址打印出来看看:

  int usa;    int  bbb=100;    int main ()    {    printf("公共代码区:%p\n",main);    const char* str="helo djwd";    //常量区    printf("常量区:%p\n",str);    printf("初始化全局数据区:%p\n",&bbb);    W>printf("未初始化全局数据区:%p\n",usa);    char* heap=(char*)malloc(100);                                                                                 printf("堆区:%p\n",heap);    printf("栈区:%p\n",&str);   

 观察打印出来的地址可以发现一个问题,从公共代码区到常量区,再往下走,地址都是呈递增状态。

当到了堆区之后,从堆区到栈区,中间宽度变的特别大。

按照这个结果我们可以有这种推论:

得出结论:堆和栈相对而生。

验证

把堆区地址打印看一下:


char* heap1=(char*)malloc(100);    
char* heap2=(char*)malloc(100);    
char* heap3=(char*)malloc(100);    
char* heap4=(char*)malloc(100);    printf("堆区:%p\n",heap);    
printf("堆区:%p\n",heap1);    
printf("堆区:%p\n",heap2);    
printf("堆区:%p\n",heap3);    
printf("堆区:%p\n",heap4);    

可以发现堆区越来越大,这也证明堆区向上增长

把栈区地址打印一下看一下:

char* str="hello";
char* heap1=(char*)malloc(100);    
char* heap2=(char*)malloc(100);    
char* heap3=(char*)malloc(100);    
char* heap4=(char*)malloc(100);    printf("栈区:%p\n",&str);                                                                                        
printf("栈区:%p\n",&heap);    
printf("栈区:%p\n",&heap1);    
printf("栈区:%p\n",&heap2);    
printf("栈区:%p\n",&heap3);    
printf("栈区:%p\n",&heap4);    

观察图我们发现栈区越往下越小

如果定义一个结构体object ,里面有三个成员变量 int a,b,c,abc谁最大?

struct d    
{    int a;    int b;    int c;    
}object;    printf("%p\n",&object.a);                                                                                        
printf("%p\n",&object.b);    
printf("%p\n",&object.c);    

很明显,c最大

这是因为虽然栈区向下增长,但整体是向上增长的:

假设我们定义一个 int b,一个int类型有4个字节,那就应该有4个地址,但是我们打印b的地址,显示出来只有一个,这个地址就是最小的地址。

然后向上按照int类型访问4个字节,访问到最大字节:

类型的本质叫做偏移量

c语言中就是以起始位置+偏移量访问任何地址。

定义一个int a,打印a的地址。

a因为是常量,所以在栈区,又因为后开辟,所有地址偏小。

 现在我们a重定义为 static int a,此刻再重新打印a。我们发现a的地址变量,它和全局变量的地址是一个样子,也就是此时a就是一个全局变量:

所以我们可以说已初始化全局变量区就是静态区:

在栈区之上还有一个环境变量区和命令参数区:

重新理解地址

地址空间

写一个子进程,写一个父进程

pid_t id=fork();

相关文章:

Linux 环境变量 二

目录 获取环境变量的后两种方法 环境变量具有全局属性 内建命令 和环境变量相关的命令 c语言访问地址 重新理解地址 地址空间 获取环境变量的后两种方法 main函数的第三个参数 &#xff1a;char* env[ ] 也是一个指针数组&#xff0c;我们可以把它的内容打印出来看看。 …...

Beyond Compare4 30天试用到期的解决办法

相信很多小伙伴都有在使用Beyond Compare 4软件&#xff0c;如果我们没有激活该软件&#xff0c;就只有30天的评估使用期&#xff0c;那么过了这30天后我们怎么继续使用呢&#xff1f;下面小编就来为大家介绍方法。 打开Beyond Compare4&#xff0c;提示已经超出30天试用期限制…...

sentinel规则持久化-规则同步nacos-最标准配置

官方参考文档&#xff1a; 动态规则扩展 alibaba/Sentinel Wiki GitHub 需要修改的代码如下&#xff1a; 为了便于后续版本集成nacos&#xff0c;简单讲一下集成思路 1.更改pom 修改sentinel-datasource-nacos的范围 将 <dependency><groupId>com.alibaba.c…...

【Linux】tail命令使用

tail 命令可用于查看文件的内容&#xff0c;有一个常用的参数 -f 常用于查阅正在改变的日志文件。 语法 tail [参数] [文件] tail命令 -Linux手册页 著者 由保罗鲁宾、大卫麦肯齐、伊恩兰斯泰勒和吉姆梅耶林撰写。 命令选项及作用 执行令 tail --help 执行命令结果 参…...

【数据结构】面试OJ题——时间复杂度2

目录 一&#xff1a;移除元素 思路&#xff1a; 二&#xff1a;删除有序数组中的重复项 思路&#xff1a; 三&#xff1a;合并两个有序数组 思路1&#xff1a; 什么&#xff1f;你不知道qsort&#xff08;&#xff09; 思路2&#xff1a; 一&#xff1a;移除元素 27. 移…...

LibreOffice编辑excel文档如何在单元格中输入手动换行符

用WPS编辑excel文档的时候&#xff0c;要在单元格中输入手动换行符&#xff0c;可以先按住Alt键&#xff0c;然后回车。 而用LibreOffice编辑excel文档&#xff0c;要在单元格中输入手动换行符&#xff0c;可以先按住Ctrl键&#xff0c;然后回车。例如&#xff1a;...

ideaSSM在线商务管理系统VS开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 SSM 在线商务管理系统是一套完善的信息管理系统&#xff0c;结合SSM框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码 和数据库&#xff0c;系统主…...

数据结构 | 顺序表专题

数据结构 | 顺序表专题 文章目录 数据结构 | 顺序表专题课前准备1. 目标2. 需要的储备知识3. 数据结构相关概念 开始顺序表1、顺序表的概念及结构2、顺序表分类3、动态顺序表的实现初始化顺序表打印顺序表内存容量的检查顺序表的尾插顺序表的尾删顺序表的头插顺序表的头删在顺序…...

C++可视化 有穷自动机NFA 有穷自动机DFA

一、项目介绍 根据正则表达式,可视化显示NFA&#xff0c;DFA&#xff1b;词法分析程序 二、项目展示...

vite vue3 ts 使用sass 设置样式变量 和重置默认样式

1.安装scss 样式支持依赖 yarn add -D sass 2.使用sass <div><!-- 测试使用sass --><h1>测试使用sass</h1> </div><style scope lang"scss"> div {h1 {color: red;} } </style> 效果&#xff1a; 3.通过npm下载并复制…...

MySQL安全基线检查

目录 安全基线检查基础知识MySQL 的安全基线检查MySQL 更严格的一些基线检查内容一、安全基线检查基础知识 1、安全基线的定义: 安全基线是一个信息系统的最小安全保证,即该信息系统最基本需要满足的安全要求。它是在安全付出成本与所能够承受的安全风险之间进行平衡的合理…...

Unity主程如何做好游戏项目管理

前言 很多小伙伴最近在面试或者考虑跳槽,可能工作了3~5年了想涨薪或想做技术总监或主程, 可自己还是个雏&#xff0c;没有做过项目技术管理&#xff0c;怎么办&#xff1f;今天我给大家梳理一下作为一个技术总监或主程你应该如何带好一个游戏项目&#xff0c;做好技术管理。接…...

103.linux5.15.198 编译 firefly-rk3399(2)

1. 平台&#xff1a; rk3399 firefly 2g16g 2. 内核&#xff1a;linux5.15.136 &#xff08;从内核镜像网站下载&#xff09; 3. 交叉编译工具 gcc version 7.5.0 (Ubuntu/Linaro 7.5.0-3ubuntu1~18.04) 4. 宿主机&#xff1a;ubuntu18.04 5. 需要的素材和资料&#xff…...

如何从Android手机上轻松恢复误删除的短信 ?

当您使用 Android 手机时&#xff0c;您可能会误删除一些 Android 短信。如果这些消息对您很重要&#xff0c;您可能想要恢复它们。在这种情况下&#xff0c;您可以尝试使用U1tData安卓数据恢复&#xff08;奇客软件&#xff09; 来完成这项工作。这篇文章将向您展示更多信息。…...

毅速丨金属3D打印能替代传统制造吗?

金属3D打印技术已经逐渐被很多行业认可和应用&#xff0c;但是目前&#xff0c;金属3D打印多数被作为传统制造技术的一种补充&#xff0c;暂时还不能完全替代传统制造。 金属3D打印使用的是金属粉末进行选择性激光烧结&#xff0c;打印时在成型缸里铺上金属粉末&#xff0c;打印…...

21个新的ChatGPT应用

自从GPT有了图识别功能后变的更加强大&#xff0c;特别是ChatGPT的视觉技术&#xff0c;为我们提供了无数的可能性。本文将深入探讨这21种应用场景&#xff0c;帮助理解其在日常生活和工作中的实际价值。 生活助手&#xff1a;为日常生活增添色彩 健身计划定制&#xff1a;你…...

【通信原理】第二章|确知信号

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量博客汇总 文章目录 前言 第二章 确知信号1. 确知…...

【JVM】类加载器

【JVM】类加载器 文章目录 【JVM】类加载器0. 类加载器概述1. 类加载器的分类1.1 启动类加载器1.2 Java中的默认类加载器1.2.1 扩展类加载器1.2.2 应用程序类加载器 2. 双亲委派机制2.1 类的双亲委派机制是什么&#xff1f;2.2 打破双亲委派机制2.2.1 自定义类加载器2.2.2 线程…...

利用Excel支持JUnit参数化测试

在JUnit里面&#xff0c;可以使用CsvFileSource读取csv文件进行参数化测试&#xff0c;可是CSV文件不支持格式&#xff0c;编辑颇为麻烦&#xff0c;尤其是多次编辑&#xff0c;因此自然想到是否可以使用Excel文件&#xff0c;可以有各种格式&#xff0c;支持各类数据。 最新开…...

第三章 SysML入门|系统建模语言SysML实用指南学习

仅供个人学习记录 UML与SysML的联系 可以稍微参考UML与SysML的联系 UML&#xff08;统一建模语言&#xff09;和SysML&#xff08;系统建模语言&#xff09;是两种与建模相关的语言&#xff0c;它们之间存在联系和区别。 SysML的图分类如下图所示。 SysML 图概述 这里只…...

敏捷开发框架Scrum-概述

如果你是一个程序员&#xff0c;可能会觉得这是个程序开发框架。Scrum是一个敏捷开发框架。我们可以把Scrum理解成一个团队一次完成一小部分工作的方式。这种方式通过不断的实验和反馈循环来学习和改进。Scrum可以帮助团队以协作的方式逐步交付价值。 Scrum框架由一个Scrum团队…...

Hafnium启动过程分析

安全之安全(security)博客目录导读 目录 一、在安全世界中加载Hafnium和安全分区 二、通过TF-A启动 1、SP manifests 2、安全分区包 3、描述安全分区...

0基础学习PyFlink——使用Table API实现SQL功能

大纲 Souceschemadescriptor Sinkschemadescriptor Execute完整代码参考资料 《0基础学习PyFlink——使用PyFlink的Sink将结果输出到Mysql》一文中,我们讲到如何通过定义Souce、Sink和Execute三个SQL&#xff0c;来实现数据读取、清洗、计算和入库。 如下图所示SQL是最高层级的…...

文心一言 VS 讯飞星火 VS chatgpt (123)-- 算法导论10.4 4题

四、用go语言&#xff0c;对于一个含 n个结点的任意有根树&#xff0c;写出一个 O(n)时间的过程&#xff0c;输出其所有关键字该树以左孩子右兄弟表示法存储。 文心一言&#xff1a; 在计算机科学中&#xff0c;左孩子右兄弟表示法是一种用于表示树状结构的方法&#xff0c;其…...

[读论文] On Joint Learning for Solving Placement and Routing in Chip Design

0. Abstract 由于 GPU 在加速计算方面的优势和对人类专家的依赖较少&#xff0c;机器学习已成为解决布局和布线问题的新兴工具&#xff0c;这是现代芯片设计流程中的两个关键步骤。它仍处于早期阶段&#xff0c;存在一些基本问题&#xff1a;可扩展性、奖励设计和端到端学习范…...

L2-1 插松枝

L2-1 插松枝 分数 25 全屏浏览题目 切换布局 作者 陈越 单位 浙江大学 人造松枝加工场的工人需要将各种尺寸的塑料松针插到松枝干上&#xff0c;做成大大小小的松枝。他们的工作流程&#xff08;并不&#xff09;是这样的&#xff1a; 每人手边有一只小盒子&#xff0c;初始…...

Android 使用ContentObserver监听SettingsProvider值的变化

1、Settings原理 Settings 设置、保存的一些值&#xff0c;最终是存储到 SettingsProvider 的数据库 例如&#xff1a; Settings.Global.putInt(getContentResolver(), "SwitchLaunch", 0); Settings.System.putInt(getContentResolver(), "SwitchLaunch&quo…...

二进制安装部署k8s

概要 常见的K8S按照部署方式 minikube 是一个工具&#xff0c;可以在本地快速运行一个单节点微型K8S&#xff0c;仅用于学习&#xff0c;预习K8S的一些特性使用。 Kubeadmin kubeadmin也是一个工具&#xff0c;特工kubeadm init 和kubedm join&#xff0c;用于快速部署k8s…...

多输入多输出 | Matlab实现k-means-ELM(k均值聚类结合极限学习机)多输入多输出组合预测

多输入多输出 | Matlab实现k-means-ELM&#xff08;k均值聚类结合极限学习机&#xff09;多输入多输出组合预测 目录 多输入多输出 | Matlab实现k-means-ELM&#xff08;k均值聚类结合极限学习机&#xff09;多输入多输出组合预测预测效果基本描述程序设计参考资料 预测效果 基…...

ITSource 分享 第5期【校园信息墙系统】

项目介绍 本期给大家介绍一个 校园信息墙 系统&#xff0c;可以发布信息&#xff0c;表白墙&#xff0c;分享墙&#xff0c;校园二手买卖&#xff0c;咨询分享等墙信息。整个项目还是比较系统的&#xff0c;分为服务端&#xff0c;管理后台&#xff0c;用户Web端&#xff0c;小…...