首页 > 编程语言 >命令行参数编程

命令行参数编程

时间:2023-11-17 23:00:11浏览次数:29  
标签:选项 字符 规则 编程 optopt 参数 命令行 返回值 getopt

1. 新程序开始时典型的栈结构

                                            

 2. 命令行参数规范

 1. 短选项参数规范:
(1)由选项、选项值、操作数组成 (注意操作数的位置不一定) 例: ① gcc test -o test.out 操作数 选项 选项值 ②./demo abc -f gg de -s 则操作数为 abc、de (2)没有选项值的选项可以合二为一 (注意-abc有时表示的选项是-a,选项值是bc;而不是 -a -b -c 注意要根据规则来看) 例:a.out -a -b -c 等价于a.out -abc (3) 第一次出现的--后面均为操作数 ./demo -s abc -- -f -s 则操作数为 abc、-f、-s
2. 长选项参数规范 (1)长选项是--指令(后面可以用等号也可以用空格) 短选项是-指令 ./demo.out --name=DYsodg --addr 127.0.0.1 -xabc

3. 命令行参数编程

1. 定义选项规则
     (1)短选项规则字符串
          例:hab:c::
            ① 选项后面没有冒号就表示没有参数,例如选项-h、-a
② 选项后面一个冒号,就表示必须要跟参数,例如-b 123 、-b123 ③ 选项后面二个冒号,表示可以跟参数也可以不跟。如果跟的话必须不含空格,例如 -c123、-carg
(2)长选项规则结构体
长选项规则必须要通过结构体struct option来定义,并且option数组的最后一个元素必须全部填充0

            struct option
            {
              const char *name;    //长选项的名称
              int has_arg,         //长选项是否带选项值:1为是,0为否,2为可选;
              int *flag,          //指向用来保存缩写字符的位置,  ① 如果flag为NULL,则getopt_long返回缩写字符val;
                                                             ② 如果flga不为NULL,则getopt_long返回0,flag保存缩写字符val
              int val             //缩写字符 val指明返回的值,或者需要加载到被flag所指示的变量中的值。
           }

2.getopt(……)函数只能解析短选项
(1)int getopt(int argc, char* const argv[],
const char* optstring) //短选项的规则字符串

(2)getopt函数首先对参数进行重新排列
例如: ① 重排前  a.out -f abc 555 -i -s 
重排后  a.out -f abc -i -s 555
② 重排前 a.out -f abc 555 -is 
重排后  a.out -f abc -is 555 

(3)调用getopt函数逐个选项的进行分析与输出,需要配合一下几个已定义好的变量

           extern char *optarg; //指向选项值,注意不是选项!!
           extern int optind,   //表示的是下一个将被getopt()处理到的参数在argv中的下标值
           optopt;              //选项字符,例如 -c 字符为c

       调用一次getopt的结果:
① 选项合法时(即符合短选项规则),返回值为选项字符的ASCII码,optarg指向选项值;
② 选项不合法(短选项规则中没有),返回值为“?”,optopt保存选项字符;
③ 选项合法但缺少选项值, 返回值为“:”,optopt保存选项字符;
④ 所有的选项均解析完, 返回值为-1。

3.getopt_long(……)函数能同时解析短选项和长选项
  (1)int getopt_long(int argc, char* const argv[],

                      const char* optstring,  //短选项规则字符串
                      const struct option * longopts, //长选项规则结构体数组
                      int *longindex,     //保存当前长选项在 长选项规则数据中数组中 第几个
                      )


   (2)getopt_long函数首先对参数进行重新排列,类似getopt
   (3)调用getopt_long逐个选项的进行分析与输出,需要配合一下几个已定义好的变量(与getopt函数类似)
           extern char *optarg; //指向选项值,注意不是选项!!
           extern int optind,   //表示的是下一个将被getopt()处理到的参数在argv中的下标值
           optopt;              //选项字符,例如 -c 字符为c
        调用一次getopt_long的结果:
           1)所有的短选项和长选项均解析完,          返回值为-1。
           2)如果碰到的是短选项  
① 选项合法时(即符合短选项规则),返回值为选项字符的ASCII码,optarg指向选项值;
② 选项不合法(短选项规则中没有),返回值为“?”,optopt保存选项字符;
③ 选项合法但缺少选项值, 返回值为“:”,optopt保存选项字符;
           2)如果碰到的是长选项
① 如果长选项合法,
若长选项规则结构体option中对应的flag为NULL,那么返回值为对应的缩写字符,optarg指向选项值;
若长选项规则结构体option中对应的falg不为NULL,那么返回值为0,flag保存缩写字符,optatg指向选项值;
②如果长选项不合法 (未验证过)
若长选项规则结构体option中对应的flag为NULL,那么返回值为“?”,optopt保存选项字符;
若长选项规则结构体option中对应的falg不为NULL,那么返回值为0,flag保存“?”,optopt保存选项字符;
③ 如果长选项不合法,但缺少选项值 (未验证过)
若长选项规则结构体option中对应的flag为NULL,那么返回值为“:”,optopt保存选项字符;
若长选项规则结构体option中对应的falg不为NULL,那么返回值为0,flag保存“:”,optopt保存选项字符;

 

标签:选项,字符,规则,编程,optopt,参数,命令行,返回值,getopt
From: https://www.cnblogs.com/dkhlaojogo/p/17839807.html

相关文章

  • java-网络编程
    第十四章网络编程引入【1】网络编程:把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大、功能强的网络系统,从而使众多的计算机可以方便地互相传递信息、共享硬件、软件、数据信息等资源。设备之间在网络中进行数据的传输,发送/接收数据。  【2】通......
  • 如何提高自己的编程能力
    提高编程能力需要不断学习和实践。以下是一些具体的方法:掌握基础知识:学习编程语言的基础语法和数据结构。了解如何使用不同的编程语言来解决不同的问题,以及如何优化代码以提高性能。阅读源代码:通过阅读其他开发人员的源代码,学习他们的编程技巧和设计模式。这有助于你了解如何更好地......
  • Oracle expdp参数详解
    数据泵导出实用程序提供了一种用于在Oracle数据库之间传输数据对象的机制。该实用程序可以使用以下命令进行调用:示例:expdpscott/tigerDIRECTORY=dmpdirDUMPFILE=scott.dmp您可以控制导出的运行方式。具体方法是:在'expdp'命令后输入各种参数。要指定各参数,请使用......
  • 小学四则运算编程实践
    小学四则运算编程实践要求:从《构建之法》第一章的“程序”例子出发,像阿超那样,花二十分钟写一个能自动生成小学四则运算题目的命令行“软件”,满足以下需求:(以下参考博客链接:http://www.cnblogs.com/jiel/p/4810756.html)使用C实现四则运算参考https://www.cnblogs.com/saiw......
  • AO3401-ASEMI低压N沟道AO3401参数、规格、尺寸
    编辑:llAO3401-ASEMI低压N沟道AO3401参数、规格、尺寸型号:AO3401品牌:ASEMI连续漏极电流(Id):4.2A漏源电压(Vdss):30V功率(Pd):700mW芯片个数:1封装:SOT-23工作温度:-50°C~150°C引脚数量:3类型:P沟道、低压MOS管AO3401描述:AO3401-ED采用先进的设计技术,提供出色的RDS(ON)、低栅......
  • SOLIDWORKS参数化设计之主参数设置
    SOLIDWORKS参数化设计是通过主参数来驱动整个模型的变化,因此确定主参数是很重要的部分。主参数可以是数值,也可以是条件,可以手动输入,也可以做成下拉列表。今天我们就来看看主参数的下拉列表是如何做到的。SolidKits.AutoWorks软件的参数表是外置参数表,使用软件提取所有参数后,可以......
  • AO3400-ASEMI中低压MOS管AO3400参数、封装、尺寸
    编辑:llAO3400-ASEMI中低压MOS管AO3400参数、封装、尺寸型号:AO3400品牌:ASEMI封装:SOT-23连续漏极电流(Id):5.8A漏源电压(Vdss):30V功率(Pd):1.4W芯片个数:1引脚数量:3类型:MOS管特性:N沟道MOS管、中低压MOS管RDS(on):28mΩVGS:1.45封装尺寸:如图工作温度:-55°C~150°CAO3400......
  • Day06面向对象编程
    所有学习内容来自:狂神说java一、面向对象编程面向对象&面向过程什么是面向对象:二、方法回顾值传递和引用传递:引用类型如类、数组等输入方法后是引用传递,在方法中改变其内部的值会导致方法外也改变;int等基本类型是值传递,不改变方法外的值。//引用传递publicclassDemo0......
  • AOP打印日志参数和耗时
    使用场景:可以通过AOP,以控制层controller所在的包为切点,在controller的方法前后打印日志,这样就能统计出接口的耗时,还能打印入参,出参,减少重复地打印日志。如果想统计dao层的入参和耗时,也可以用类似的方法。代码示例:@Aspect@ComponentpublicclassRequestLogAop{......
  • 怎样提高自己的编程能力
    提高编程能力需要综合多方面的技能和知识,以下是一些建议:持续练习编程:编程是一项需要不断练习的技能,多写代码、多解决问题才能不断提高自己的编程能力。学习数据结构和算法:数据结构和算法是编程的核心,深入学习这些内容可以帮助你更好地理解程序的结构和运行原理。学习面向对象编程:面......