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

西凤酒网站建设的目标异构国际设计

西凤酒网站建设的目标,异构国际设计,深圳做网站做app,合肥大型网站制【LInux进程六】命令行参数和环境变量 1.main函数的两个参数2.利用main函数实现一个简单的计算器3.环境变量之一:PATH4.修改PATH5.在命令行解释器bash中查看所有环境变量6.用自己写的程序查看环境变量7.main函数的第三个参数8.本地的环境变量和环境变量9.环境变量具…

【LInux进程六】命令行参数和环境变量

  • 1.main函数的两个参数
  • 2.利用main函数实现一个简单的计算器
  • 3.环境变量之一:PATH
  • 4.修改PATH
  • 5.在命令行解释器bash中查看所有环境变量
  • 6.用自己写的程序查看环境变量
  • 7.main函数的第三个参数
  • 8.本地的环境变量和环境变量
  • 9.环境变量具有全局性
  • 10.内建命令与常规命令

1.main函数的两个参数

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

这两个参数又被称为命令行参数
char* argv[]是一个指针数组,包含的每个指针分别指向不同的字符串
int argc代表这个数组的元素个数(指针的数量)

通过下面的代码查看argv数组中存放的是什么字符串:

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

在这里插入图片描述

当我们运行可执行程序mybin时,它会打印0: ./a.out
当我们以空格为分割在./mybin后面继续输入任意字符串时,它会以空格为分割,分别打印出数组中下标为0,1,2的字符串,这些输出的字符串正是我们所输入的
将命令行输入的字符串放入argv数组是操作系统所为

请添加图片描述

2.利用main函数实现一个简单的计算器

#include<stdio.h>    
#include<string.h>    
#include<stdlib.h>    int main(int argc,char* argv[])    
{    if(argc != 4)    {    printf("%s Option:[add|sub|mul|div] num1 num2\n",argv[0]);    return 1;    }    int x = atoi(argv[2]);    int y = atoi(argv[3]); if(strcmp(argv[1],"add") == 0)    printf("%d + %d = %d\n",x,y,x + y);    else if(strcmp(argv[1],"sub") == 0)    printf("%d - %d = %d\n",x,y,x - y);    else if(strcmp(argv[1],"mul") == 0)    printf("%d * %d = %d\n",x,y,x * y);    else if(strcmp(argv[1],"div") == 0)                                                                                                                                   printf("%d / %d = %d\n",x,y,x / y);    else    printf("输入操作符错误");    return 0;    
}    

在这里插入图片描述

3.环境变量之一:PATH

让我们思考几个问题:

  1. 为什么我们自己写的程序运行时要加./
  2. 但是系统中的指令:ls,pwd等不用加./?
  3. 我们自己写的指令能不能不加./?

我们自己写的程序要加上./的本质就是让操作系统在当前目录下寻找我们写的程序

保存程序的默认搜索路径的就是环境变量,叫做: PATH
查看环境变量PATH的指令:echo $PATH
在这里插入图片描述
这些路径以冒号:为分割
因为我们自己写的程序不在这些路径中,所以我们需要加上./来运行程序

4.修改PATH

要想我们的指令像系统指令一样不加./就能运行,我们可以将自己写的程序的路径加入到环境变量PATH中
使用指令:PATH=$PATH:要添加的路径
请添加图片描述
在这里插入图片描述

下次重启时又会恢复为默认路径,因为操作系统在登陆时会执行以下步骤:

  1. 认证用户名和密码是否正确
  2. 形成环境变量(PATH,PWD,HOME等)
  3. 根据用户名初始化HOME=/root或者HOME=/home/xxx
  4. cd $HOME(进入到自己的环境变量)

5.在命令行解释器bash中查看所有环境变量

指令:env
在这里插入图片描述
环境变量:

  1. PWD:记录当前路径,指令pwd就是调用了PWD这个环境变量在这里插入图片描述

  2. HOME:进入家目录指令:cd ~,环境变量HOME里面的内容就是家目录的位置在这里插入图片描述

6.用自己写的程序查看环境变量

使用函数:getenv()

char*  = NULL;
ret = getenv("PATH");//获取环境变量PATH

7.main函数的第三个参数

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

第三个char* env[]是指针数组,指向了一张环境变量表,打印出来的内容和使用指令env查看的内容是一样的

查看环境变量表

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

在这里插入图片描述
系统会给main函数提供两张表:

  1. 命令行参数表
  2. 环境变量表enü

8.本地的环境变量和环境变量

我们可以在命令行解释器bash中直接定义环境变量
指令:自己取的变量名=变量内容(=前后不能有空格)
echo $变量名指令用来打印变量
在这里插入图片描述
用户自己定义的环境变量就是本地的环境变量
用指令:env在bash中无法查找到刚才定义的本地的环境变量,因为本地变量不在环境变量表
在这里插入图片描述
使用指令:export 本地环境变量名或者export 自己取的变量名=变量内容可以把本地环境变量加入环境变量表

在这里插入图片描述

9.环境变量具有全局性

每次重新启动bash后,我们自己定义或修改的环境变量就不见了
因为我们修改的环境变量表是bash内部的,每一次重新登陆账号都会依照家目录下的.bash_profile文件中的内容重新生成命令行解释器bash
想要定义或修改被保存下来,就要把环境变量保存在家目录中的配置文件.bash_profile中(也可能是.profile文件)
在这里插入图片描述

命令行启动的进程都是shell和bash的子进程,子进程的命令行参数和环境变量都是父进程传递的
所以命令行参数表会通过main函数的参数从父进程传递给子进程

本地变量 VS 环境变量

  1. 本地变量只在bash进程内部有效,不会被子进程继承
  2. 环境变量通过让所有子进程继承的方式,实现自身的全局性

10.内建命令与常规命令

bash中的指令可以直接使用而不用加./去寻找路径,是因为它的
路径在环境变量的PATH中
当我们把环境变量中的PATH置空后,lsll指令都无法使用,但pwdecho依然正常
在这里插入图片描述

因为Linux下的指令分为两种:

  1. 常规命令:由bash创建的子进程执行的
  2. 内置命令:由bash自己执行的(父进程内部执行)

而pwd和echo就是内置命令

当我们定义的本地变量没有放入环境变量表中时,命令env都找不到这个本地变量,而命令echo却能获取到本地变量的信息,正是因为echo是内建命令,是由父进程自己执行的,echo它可以看见父进程的变化,子进程不能接受父进程的本地变量,所以由子进程执行的常规命令env获取不到本地变量的信息(命令行启动的进程都是shell和bash的子进程,而内置命令是由bash自己执行的),直到本地变量放入具有全局性的环境变量表中,由子进程继承该环境变量表中才能使用命令env查看到
在这里插入图片描述


文章转载自:

http://xcISG0pK.sphft.cn
http://fzXqP8lu.sphft.cn
http://eZCHXOoe.sphft.cn
http://O7lLIdey.sphft.cn
http://Ql6oYlZR.sphft.cn
http://F9mgvhMB.sphft.cn
http://mCHYy9dn.sphft.cn
http://oVR8MJTs.sphft.cn
http://XRTyFWRF.sphft.cn
http://RlTbAgkd.sphft.cn
http://zI2HOIjS.sphft.cn
http://TW2uHC20.sphft.cn
http://q0mZEfJJ.sphft.cn
http://Nij3bhAx.sphft.cn
http://VPhUPwXy.sphft.cn
http://iPcxz7vI.sphft.cn
http://Erdzy6lb.sphft.cn
http://PEywbI0Y.sphft.cn
http://lkB8k7gl.sphft.cn
http://r7wA6Uq6.sphft.cn
http://CNGO3IlS.sphft.cn
http://FjspisfQ.sphft.cn
http://MvCE6ECj.sphft.cn
http://85V3cISU.sphft.cn
http://DqNutCdA.sphft.cn
http://oDhquQ9E.sphft.cn
http://w9peDpU5.sphft.cn
http://vsK7iAsx.sphft.cn
http://lFRQGkj8.sphft.cn
http://obUADkqw.sphft.cn
http://www.dtcms.com/wzjs/715206.html

相关文章:

  • 佛山专业的免费网站优化网站制作有哪些技术
  • 网站外包建设wordpress添加前台
  • phpcms 网站模板网页制作与网站建设实验报告
  • 网站防采集 如何采集管理咨询公司一般是做什么的
  • 站酷网首页wordpress下载主题模板
  • 河南睢县筑宇建设网站wordpress广告位的添加方法
  • 绍兴市中等专业学校网站镇江网站建设推广公司
  • 环保网站建设说明网站网页设计0基础学
  • iis更改默认网站百度网站推广怎么样
  • 仿70网站分类目录源码凡客平台
  • wordpress 增加站长统计2022装修简约风格效果图
  • 合肥网站建设服务百度推广广告公司
  • 不利于网站收录怎么做网络平台
  • 杭州模板开发建站常州百度网站排名优化
  • 有个人做网站的吗长沙零零七网站建设
  • led灯网站策划书如何做个网站
  • 5118网站是免费的吗自助建设分销商城网站
  • 石家庄个人谁做网站合肥专业网站制作团队
  • 网站后台密码忘了微信小程序投票怎么快速投多票
  • 关于建设工程的网站什么是优化网站
  • 做培训体系的网站手机和网站页面模板
  • 网站建设计划建议wordpress做简单的商城
  • 大型门户网站有哪些海口网红景点
  • icp备案 网站名称网站设计 中高端
  • 网站开发都需要哪些图专门帮做ppt的网站
  • 做百度手机网站优化做影视网站存储视频会侵权吗
  • 哪里可以找人做网站如皋建设局网站
  • 深圳网站制作公司兴田德润官网多少wordpress 登录不上
  • 上海网站建设润滋网站规划与建设 第2版ppt
  • 卖域名的网站哪个好河北招投标网招标公告