环境变量与虚拟地址空间
环境变量与虚拟地址空间环境变量1问题引入2引入环境变量3环境变量和c代码关系1.用代码获取环境变量2.作用(4)添加环境变量5删除环境变量6set环境变量1问题引入你在xshell里写了一个程序程序名字叫做code.c// An highlighted block#includeiostreamintmain(){int x;cinx;coutx;return0;}好现在你建立了一个makefile文件内容是code:code.c gcc-o $ $^.PHONY:cleanclean:rm-f code在make一下如果你想编译一下需要输入./code但是平时我们用的系统命令ls,which man,tree之类的不用带路径而自己的程序则需要带路径,/是指当前路径普通文件系统会去/usr/bin路径取找如果你sudo cp code/usr/bin那你就能直接code运行当然不要乱往/usr/bin里面乱放文件搞完之后一定要// An highlighted blocksudorm/usr/bin/codelinux是不会在当前路径找文件的./是告诉os用户执行的bin就在当前路径下问题linux还会不会取其他路径查找呢结论linux系统会存在所谓的环境变量的东西,PATHechoPATH//这样写只会打印PATHecho $PATH//这里的$有点像c语言中的指针打印多串路径echo $PATH告诉linux系统用户如果执行一个可执行文件没有指明路径到PATH指定路径查找所以还可以把code.c所在的文件路径加入到PATH中这样也可以不用带路径pwdPATH(pwd的内容)//覆盖但其他的有些指令无法执行了关闭xshell就可以了不用重新配置pwdPATH$PATH:(pwd的内容)//添加PATH:指定命令的搜索路径当然windows也有环境变量这个概念如果你把某个程序放到PATH下你在cmd打开的输入名称的话就可以打开所以windows配置环境其实就是避免了一定要在对应路径的情况下才能打开在命令行可以打开2引入环境变量系统级的变量变量名和变量内容往往具有全局属性(在任意路径都可以访问)、想查看当前xshell的机器属性可以输入env其中HISTSIZE是linux会帮你储存最近的1000条消息为什么是1000条就是因为HISTSIEZ是1000cd -切换最近的路径其实就是cd $oldpwd这个呢则是记录当前在哪个终端因为xshell支持在多个终端登录可以互相运输文件通过这个就可以查看当前是哪个终端例如echo aaa/dev/pts/0就可以往这个终端打印aaacd ~回到家目录本质是cd $HOMESHELL :当前的shell,通常是/bin/bash3环境变量和c代码关系1.用代码获取环境变量#incluediostreamintmain(int argc,char*argv[],char*env[]){(void)argc;//如果argc和argv写了但是不用打话最好强转化为void类型(void)argv;int i0;for(;env[i];i){printf(:env[%d]:%s\n,i,env[i]);//env[i]最后一个也是NULL}return0;}当然如果不想再main函数中写入参数可以写成不常用#incluediostream#includeunistd.hintmain(){extern char**environ;//声明不然可以显示无法识别int i0;for(;environ[i];i){printf(:environ[%d]:%s\n,i,environ[i]);}return0;}拿到系统的环境变量表本质是把环境变量表传递给进程,默认是在bash内部的虽然子进程你创建的进程没有收到bash给的环境变量但是默认子进程就可以获得bash(父进程)内的命令行参数和环境变量最常见获取常见变量的是char*getenv(constchar*name);//头文件#include stdlib.h2.作用不同的环境变量会有不同的应用场景可以对应设置环境变量是父进程给的可以理解为继承过来的当我内部在fork一下的时候我创建的子进程也可以看到env[];所以环境变量有全局性bash进程的环境变量又是从linux系统的配置环境来的配置文件如果想更改可以打开bashrc进行修改当然你修改这个文件的时候只修改这个用户的别的用户不会被修改(4)添加环境变量假设你要定义一个TEST_ENV对象如果你直接TEST_ENV 123456789本地变量无法被子进程继承不具备全局性在能在bash内部访问然后env | grep TEST_ENV是无法找到的想要加入这个变量到环境变量中例子1例子1TEST_ENV 123456789export $TEST_ENV(export把本地变量写入到环境变量)例子2export aaaaa66665删除环境变量例子1unset TEST_ENV例子2unset aaaaaunset环境变量名作用取消环境变量注echo env unset均是内存级别的重新打开xshell后就消失了6set储存环境变量和本地变量
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2419552.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!