进程详解二——命令行参数与环境变量

本文详细讲述了C++编程中main函数的命令行参数argc和argv的作用,以及环境变量(如PATH)的原理。讨论了如何通过命令行参数和环境变量控制程序行为,并介绍了内建命令的概念及其工作方式。
摘要由CSDN通过智能技术生成

命令行参数

main函数中一般有三个,但是在平时编码时一般会进行省略

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

参数的含义(针对前两个参数)

argc:用于保存命令行输入的字符串个数
argv:用于保存命令函数输入的字符串,末尾为NULL
在这里插入图片描述

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

执行结果
在这里插入图片描述

为什么要有命令行参数呢?

命令行参数可以通过输入的不同选项,执行不同的行为

//示例代码
#include<stdio.h>                  
#include<string.h>                 
int main(int argc,char* argv[]){   
  int index = 1;                   
  if(strcmp(argv[index],"a")==0){  
    printf("the command is -a\n"); 
  }                                
  if(strcmp(argv[index],"-l")==0){ 
    printf("the command is -l\n"); 
  }                                
  return 0;                        
}                                  

执行结果
在这里插入图片描述

环境变量

引入:在linux中一切皆文件,像ls、mkdir等指令也是文件,那么为什么执行他们的时候不用指定路径,而执行我们自己的程序时需要指定路径呢?我们自己的程序可不可以省略路径直接执行呢?
答案是可以的,通过对环境变量的配置告诉命令行解释器,应该去哪里找可执行程序

查看环境变量的内容

查看指定环境变量

ehco $环境变量名
ehco $PATH
echo $PWD
echo $HOME
....

查看环境变量列表

env

在这里插入图片描述

将我们自己的程序添加到PATH环境变量中

//添加程序路径至环境变量
PATH:$PATH:/home/learn/code

在这里插入图片描述

当我们重新启动linux时,我们自己的程序又需要指定路径了,这是因为环境变量是内存级的,linux启动时,系统中的配置都会被加载到bash进程中 (内存)。
那为什么ls、cd等指令重启Linux后还是可以继续执行呢?这是因为这些指令提前被配置好了,保存在了配置文件中。
bash_profile文件
在这里插入图片描述

创建新的环境变量

创建环境变量

export envName=val

在这里插入图片描述

取消环境变量

unset envName

在这里插入图片描述

代码中的环境变量操作

通过命令行参数env获取

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

通过environ获取

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

在这里插入图片描述

内建命令

内建命令指的是由bash亲自执行而非bash创建子进程去执行的命令,常见的有:pwd、export、echo等。

父进程是如何将非内建命令交给子进程去执行的呢?

在bash进程启动时,会给子进程维护两张表,分别是argv命令行参数表和env环境变量表(environ指针也是指向env表的),通过argv表将命令交付给子进程,再通过env表找到命令所在路径,从而通过子进程完成命令的执行。
综上我们得出一个结论,环境变量是具有全局性的,父进程的环境变量可以被子进程继承。

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值