昨天在做code review的时候,看到函数getopt(),似乎没见过,狗狗之,大惊……发现原来自己干过N次愚蠢的事!!!
        函数getopt()用来分析命令行参数(可怜的Sam啊……以前还傻愣愣的自己写命令行参数解析函数…I’m too simple…sometimes naive.),其函数原型和相关变量声明如下:
        #include  < unistd.h >
        extern  char   * optarg; 
        extern  int  optind,   //  初始化值为1,下一次调用getopt时,从optind存储的位置重新开始检查选项。 
        extern  int  opterr,   //  初始化值为1,当opterr=0时,getopt不向stderr输出错误信息。
        extern  int  optopt;   //  当命令行选项字符不包括在optstring中或者选项缺少必要的参数时,
                                     //  该选项存储在optopt中, getopt返回'?’。
         int  getopt( int  argc,  char   *   const  argv[],  const   char   * optstring);

optarg和optind是两个最重要的external 变量。optarg是指向参数的指针(当然这只针对有参数的选项);optind是argv[]数组的索引,众所周知,argv[0]是函数名称,所有参数从argv[1]开始,所以optind被初始化设置指为1。        每调用一次getopt()函数,返回一个选项,如果该选项有参数,则optarg指向该参数。 在命令行选项参数再也检查不到optstring中包含的选项时,返回-1。

        函数getopt()有三个参数,argc和argv[]应该不需要多说,下面说一下字符串optstring,它是作为选项的字符串的列表。
        函数getopt()认为optstring中,以'-’开头的字符(注意!不是字符串!!)就是命令行参数选项,有的参数选项后面可以跟参数值。optstring中的格式规范如下:
1) 单个字符,表示选项,
2) 单个字符后接一个冒号”:”,表示该选项后必须跟一个参数值。参数紧跟在选项后或者以空格隔开。该参数的指针赋给optarg。
3) 单个字符后跟两个冒号”::”,表示该选项后必须跟一个参数。参数必须紧跟在选项后不能以空格隔开。该参数的指针赋给optarg。(这个特性是GNU的扩张)。
        例如optstring="ab:c::d::",程序名称为test.ext,在命令行下运行该程序:
        test.exe  - a  - b host  - ckeke  - d haha

在这个命令行参数中,-a和-h就是选项元素,去掉'-',a,b,c就是选项。host是b的参数,keke是c的参数。但haha并不是d的参数,因为它们中间有空格隔开。所以上面的命令行调用会出错。

        默认情况下getopt会重新排列命令行参数的顺序,所以到最后所有不包含选项的命令行参数都排到最后。例如:
        test.exe  - a ima  - b host  - ckeke  - d haha

最后命令行参数的顺序是: -a -b host -ckeke -d ima haha
        如果optstring中的字符串以'+'加号开头或者环境变量POSIXLY_CORRE被设置。那么一遇到不包含选项的命令行参数,getopt就会停止,返回-1。

    对getopt()函数的使用,通常用一个循环,不断的调用它,获得其参数选项以及参数值(如果有的话),直到取完最后一个命令行参数(getopt()函数返回值为-1)。并且,为了防止用户不按照要求进行命令行输入,会设计一个help选项,以告知用户如何使用命令行运行该程序)

getopts函数简介相关推荐

  1. SQL中 decode()函数简介

    今天看别人的SQL时看这里面还有decode()函数,以前从来没接触到,上网查了一下,还挺好用的一个函数,写下来希望对朋友们有帮助哈! decode()函数简介: 主要作用:将查询结果翻译成其他值(即 ...

  2. 【Android 逆向】ptrace 函数 ( C 标准库 ptrace 函数简介 | ptrace 函数真实作用 )

    文章目录 一.C 标准库 ptrace 函数简介 二.ptrace 函数真实作用 一.C 标准库 ptrace 函数简介 ptrace 函数 : 在 C 标准库 中有一个 ptrace 函数 , 该函 ...

  3. TypeScript基础入门 - 函数 - 简介

    2019独角兽企业重金招聘Python工程师标准>>> 转载 TypeScript基础入门 - 函数 - 简介 项目实践仓库 https://github.com/durban89/ ...

  4. Python之pandas:pandas的get_dummies函数简介(将分类变量转为哑变量)及其使用方法之详细攻略

    Python之pandas:pandas的get_dummies函数简介(将分类变量转为哑变量)及其使用方法之详细攻略 目录 pandas的get_dummies函数简介 pandas.get_dum ...

  5. Python之sklearn:LabelEncoder函数简介(编码与编码还原)、使用方法、具体案例之详细攻略

    Python之sklearn:LabelEncoder函数简介(编码与编码还原).使用方法.具体案例之详细攻略 目录 LabelEncoder函数的简介(编码与编码还原) Methods LabelE ...

  6. Python:numpy库中的一些函数简介、使用方法之详细攻略

    Python:numpy库中的一些函数简介.使用方法之详细攻略 目录 numpy库中的一些函数简介.使用方法 1.np.concatenate() 1.1.函数案例 1.2.函数用法 numpy库中的 ...

  7. php-calendar,PHPCalendar的函数简介

    PHPCalendar的函数简介 PHPCalendar函数 日历扩展包含了简化不同日历格式间的转换的函数.下面是小编为大家整理的PHPCalendar的'函数简介,欢迎参考~ PHP Calenda ...

  8. C++ inline 函数简介

    1.inline 函数简介 inline 函数由 inline 关键字定义,引入 inline 函数的主要原因是用它替代 C 中复杂易错不易维护的宏函数. 2.编译器对 inline 函数的处理办法 ...

  9. oracle sql文字列函数,Oracle 数据库SQL中 decode()函数简介

    decode()函数简介: 主要作用:将查询结果翻译成其他值(即以其他形式表现出来,以下举例说明): 使用方法: Select decode(columnname,值1,翻译值1,值2,翻译值2,.. ...

最新文章

  1. 谷歌大神Jeff Dean点赞网红博士论文:改进分布式共识机制 | 技术头条
  2. 中国照明市场运营现状及发展前景分析报告2021年版
  3. 友盟小米收不到推送消息_App消息推送的到达率多少才是正常的?
  4. 你真的会玩SQL吗?Case也疯狂
  5. php json -gt;访问,【转】Php+ajax+jsonp解决ajax跨域问题
  6. 普罗米修斯监控java项目_java学到什么程度可以出去实习?
  7. caffe/build/tools下会生成一些工具
  8. [收藏学习]Openstack中Keystone及dashboard安装参考
  9. java视频格式转_java 实现 视频格式转换(转)
  10. 数据结构与算法应用(五):Minimum Subarray
  11. P3717 [AHOI2017初中组]cover——洛谷(差分)
  12. 通过PS的图层样式制作透明的玻璃字
  13. C++17 实现日期和时间相关编程
  14. js判断数字,如果出现全角数字,将其转换为半角
  15. css之calc,CSS之calc()
  16. 修复硬盘数据的时候用!
  17. 道指mt4代码_MT4产品代码
  18. OSG+TUIO osgRecipes之osgtuio
  19. 酷炫动态代码时钟 向你的女神展示吧
  20. RK3399平台开发系列讲解(SPI子系统)4.16、SPI子系统之spidev驱动分析

热门文章

  1. 2.4G模块NRF24L01调试经验
  2. 讲解NRF24L01P无线收发模块(转载)
  3. 如何用Java设计一个简单的窗口界面(初级二)
  4. java ext.dirs_关于-Djava.ext.dirs使用问题
  5. java基础知识之一:命名规则(包名、类名、变量名、方法名)
  6. 【Py】基于Python的身份证读卡器二开全记录
  7. 防止表单重复提交的问题
  8. 主键约束、主键自增约束、唯一约束、非空约束、外键约束
  9. org.apache.mina.core.RuntimeIoException: Failed to get the session 异常可能出现的原因
  10. codeforces B.Maximum Absurdity 解题报告