[cpp] view plaincopy
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. int main(int argc, char *argv[]) {
  4. extern char *optarg;//保存选项的参数
  5. extern int optind, opterr, optopt;
  6. int ch;
  7. printf("\n\n");
  8. printf("otperr:%d\n", opterr);//是否将错误信息输出到stderr,为0时表示不输出
  9. printf("optind:%d\n", optind);//记录下一个检索位置
  10. printf(">>>>>>>>>>>>>>>>>>>>>\n");
  11. opterr = 1;
  12. while ((ch = getopt(argc, argv, "a:b::cde")) != -1) {//当a没有传入参数时,会执行case '?':
  13. //while ((ch = getopt(argc, argv, ":a:b::cde")) != -1) {//当a没有传入参数时,会执行case ':':
  14. printf("optind:%d\n", optind);
  15. printf("optarg:%s\n", optarg);
  16. printf("ch:%c\n", ch);
  17. switch (ch) {
  18. case 'a':
  19. printf("option a: '%s'\n", optarg);
  20. break;
  21. case 'b':
  22. printf("option b: '%s'\n", optarg);
  23. break;
  24. case 'c':
  25. printf("option c\n");
  26. break;
  27. case 'd':
  28. printf("option d\n");
  29. break;
  30. case 'e':
  31. printf("option e\n");
  32. break;
  33. case ':':
  34. printf("option lost...\n");
  35. break;
  36. case '?':
  37. printf("unknow option :%c\n", ch);
  38. }
  39. }
  40. printf("optopt +%c\n", optopt);//不在选项字符串optstring中的选项。找不到参数的case '?'和缺少选项的case ':'的选项
  41. }

函数说明:
[cpp] view plaincopy
  1. #include <unistd.h>
  2. extern char *optarg;
  3. extern int optind, opterr, optopt;
  4. int getopt(int argc, char * const argv[], const char *optstring);

optarg:选项的参数指针

optind:记录下一个检索位置,在getopt的执行中,每次进入都会更新optind变量,该变量指向下一个argv参数

opterr:是否将错误信息输出到stderr,为0时表示不输出

optopt:当命令行选项字符不包括在optstring中或者选项缺少必要的参数时,该选项存储在optopt中,getopt返回'?’

optstring说明:

"a:b::cde",这就是一个选项字符串。对应到命令行就是-a ,-b ,-c ,-d, -e 。冒号又是什么呢? 冒号表示参数,一个冒号就表示这个选项后面必须带有参数,如果optstring中指定了option需要参数,但在命令行没有参数,那么getopt将返回'?',如果在optstring的第一个字符(或者在第一个字符是+/-之后)是':',那么将返回':',这个参数可以和选项连在一起写,也可以用空格隔开,比如-a123 和-a   123(中间有空格) 都表示123是-a的参数;两个冒号的就表示这个选项的参数是可选的,即可以有参数,也可以没有参数,若有参数,optarg指向该该参数,否则optarg为NULL,但要注意有参数时,参数与选项之间不能有空格(有空格会报错),这一点和一个冒号时是有区别的。

传入的'-'开始的字符被解析为选项,getopt一次执行解析出一个option,如果循环执行,可以将argv中的全部option解析出来,如getopt返回-1,表示argv[]中的所有选项被解析出。

实例讲解getopt()函数的使用相关推荐

  1. php脚本函数,PHP执行系统命令函数实例讲解

    命令注入 命令注入(Command Injection),对一些函数的参数没有做过滤或过滤不严导致的,可以执行系统或者应用指令(CMD命令或者 bash 命令)的一种注入攻击手段. 常见的执行系统命令 ...

  2. python3 next_对Python 3.2 迭代器的next函数实例讲解

    在python中,使用iter函数可以获得有序聚合类型的迭代器,我个人将迭代器理解为带有next指针的单向链表,获取到的迭代器为链表的表头,表头内容为空,next指针指向有序聚合类型的第一个元素.在访 ...

  3. python中locals函数_Python神奇的内置函数locals的实例讲解

    摘要 本文我们介绍神奇的locals函数,包括动态创建变量和动态访问变量,以及一个应用场景. 相同属性不相邻问题 需求:有两个list,分别为list1和list2.list1中有n个对象,每个对象有 ...

  4. mysql自定义函数的分号_MySQL之自定义函数实例讲解

    转自:https://www.2cto.com/database/201804/740205.html MySQL中已经有很多函数,如时间函数等,但是有时这些函数不能满足自己的设计需求,此时需要自定义 ...

  5. php simplexml_load_file 详解,php中simplexml_load_file函数用法实例讲解

    php中simplexml_load_file函数用法实例讲解 发布于 2015-02-07 06:53:40 | 136 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文 ...

  6. php中的ltrim,PHP中ltrim()函数的用法与实例讲解

    PHP中ltrim()函数的用法与实例讲解 PHP ltrim() 函数 实例 移除字符串左侧的字符: $str = "Hello World!"; echo $str . &qu ...

  7. python的empty函数_python中numpy.empty()函数实例讲解

    在使用python编程的过程中,想要快速的创建ndarray数组,可以使用numpy.empty()函数.numpy.empty()函数所创建的数组内所有元素均为空,没有实际意义,所以它也是创建数组最 ...

  8. getopt函数讲解

    一. 前言 当我们编写好一个应用程序,经常需要添加一些命令行选项以支持不同的场景.假设我们编写了一个可以以指定方式连接到其他主机端口的应用程序 connect,我们可以执行 ./connect -m ...

  9. 手摸手教你数据可视化!(附实例讲解)

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:CrescentAI,华南理工大学,Datawhale优秀学习者 ...

最新文章

  1. OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔总结
  2. Boosting集合算法详解(一)
  3. java简单数据结构_图解Java常用数据结构
  4. linux pae内核安装,Linux 安装PAE内核
  5. 运算符--位移运算符和一些其他运算符
  6. 命令行重启Oracle数据库
  7. Facebook广告设定技巧经验分享
  8. html5 js 手机剪切板,JavaScript+Html5实现按钮复制文字到剪切板功能(手机网页兼容)...
  9. java mp3 信息_如何用Java读取MP3文件的Tag信息
  10. 基于微博数据的人物性格分类系统
  11. windowskb2685811补丁_Win7/8.1 KB2685811、KB2685813和KB2670838蓝屏补丁下载汇总 (32位+64位)...
  12. setting配置文件详解
  13. Kylin中cube优化
  14. 什么是设备管理系统,包括哪些内容?一文读懂
  15. 信阳毛尖大山茶、高山茶、小山茶的辨别
  16. SAP 采购合同案例教程后台配置
  17. 【SQL注入17】绕过手法与防御
  18. Gitlab和AD账号集成,账号登录时报错:Invalid credentials
  19. 机器学习算法终极对比:树模型VS神经网络
  20. elementui确认消息区分取消和关闭按钮

热门文章

  1. debian下安装repo
  2. Redis的编译安装
  3. 做订购系统必须要明白的几点
  4. ny12 喷水装置(二)
  5. Linux下的signal信号机制
  6. 数据多重共线性_多重共线性对您的数据科学项目的影响比您所知道的要多
  7. 掩码 项目编码_每天进行20天的编码项目
  8. 如何使用EF Core在Blazor中创建级联的DropDownList
  9. PCB genesis自制孔点 Font字体实现方法
  10. jQuery Ajax