秒懂:命令行参数

1.引入

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

这里的第一个参数代表的就是命令。

2.情景解析

运行以下代码

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

结果:

 我们可以发现,当我们输入一个指令时,argv[0]代表就是该指令,若在后面再添加选项,那么会出现argv[1]、argv[2]这些数据,说明argv[]可能是一个数组

即就是:

 所以我们得到:

编译运行我们发现

  • argc中的元素就是命令行中输入的是参数,即命令行参数
  • argc是根据命令行输入的参数变动的大小的
  • argc 是不包括NULL的个数的
  • char *argv[ ] 是变长数组
  • 命令行输入的参数会存在程序(自己的程序a.out 或者 系统的指令程序)和程序匹配的选项

这些指令执行的过程:

1.用户在命令行输入的参数整体是一个命令行字符串。
2.由OS中的进程/模块负责以空格为分割线分割成1个1个字符串(把字符串变成"\0")。
3.OS中的进程/模块 把这些字符串的地址传给argv数组,形成命令行参数表,argv中的元素都指向这些字符串。
4.再以参数的形式传给子进程的main函数。
5.命令行参数表前面都是有效字符串的地址,最后必须以NULL收尾。

3.命令行参数的意义:

 为什么要这么干❓main函数存在的意义❓

        通过给同一个可执行程序带上不同的选项,从而实现让同一个程序根据不同的选项执行不同的功能。

不同的选项 ≈ 不同的子功能 ≈  argc >= 2
argc是多少,argv数组就有多少个元素(不包括NULL)
命令行参数本质是交给我们程序的不同的选项,用来定制不同的程序功能。命令中会携带很多的选项。

4.谁形成的命令行参数:(到底是谁这么干的❓)

bash进程。 

  • OS启动的时候都会启动一个进程☞bash进程
  • 命令行中无论是启动自己的程序,还是系统程序。都会变成进程,起始都是bash的子进程。
  • 命令行中输入的参数默认是输入给bash进程的获取的。
  • 注意❗:系统指令程序和自己程序启动运行都是一样,并没有任何差别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值