函数原型:

        int getopt(int argc,char * const argv[ ],const char * optstring);

        给定了命令参数的数量 (argc)、指向这些参数的数组 (argv) 和选项字符串 (optstring) 后,getopt() 将返回第一个选项,并设置一些全局变量。使用相同的参数再次调用该函数时,它将返回下一个选项,并设置相应的全局变量。如果不再有识别到的选项,将返回 -1,此任务就完成了。

头文件:

        #include<unistd.h>

全域变量:

        extern char *optarg——指向当前选项参数(如果有)的指针。

        extern int optind——再次调用 getopt() 时的下一个 argv 指针的索引。

        extern opterr, optoptt——最后一个未知选项。

参数介绍:

        argc和argv:这两个参数就是main函数中的两个参数,可直接使用。

        optstring: optstring是选项字母组成的字串。optstring中的指定的内容的意义(例如getopt(argc, argv, "ab:c:de::");)

        1.单个字符,表示选项,(如上例中的abcde各为一个选项)。

        2.单个字符后接一个冒号:表示该选项后必须跟一个参数。参数紧跟在选项后或者以空格隔开。该参数的指针赋给optarg。(如上例中的b:c:)。

        3 单个字符后跟两个冒号,表示该选项后可以跟一个参数,也可以不跟。如果跟一个参数,参数必须紧跟在选项后不能以空格隔开。该参数的指针赋给optarg。(如上例中的e::,如果没有跟参数,则optarg = NULL)。

如果在处理期间遇到了不符合optstring指定的其他选项getopt()将显示一个错误消息,并将全域变量optarg设为“?”字符,如果不希望getopt()打印出错信息,则只要将全域变量opterr设为0即可。

示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h> int main(int argc, char *argv[]) {
<span id="transmark"></span>if(argc == 1) {
printf(“error 1”);
return 0;
} int opt;
const char *optstring = “ab:c::d”; while((opt = getopt(argc, argv, optstring)) != -1) {
switch(opt) {
case ‘a’: printf(“%c\n”, opt); break;
case ‘b’: printf(“%c, %s\n”, opt, optstring); break;
case ‘c’: printf(“%c, %s\n”, opt, optstring); break;
case ‘d’: printf(“%c, %s\n”, opt); break;
}
}
return 0;
}

执行以下命令进行测试:

a
d
b, 200
c, 300

最新文章

  1. Create Volume 操作(Part III) - 每天5分钟玩转 OpenStack(52)
  2. Unity Profiler 性能分析
  3. 1017关于EXPLAIN的语法
  4. JavaScript深入浅出1-数据类型
  5. SQL Server 2012 自动增长列,值跳跃问题
  6. python2.7之MySQLdb模块 for linux安装
  7. easyui plugin——etreegrid:CRUD Treegrid
  8. 【笨嘴拙舌WINDOWS】字符类型与字符串
  9. Umbraco TextBoxFor 如何加样式和属性
  10. Javascript 闭包与高阶函数 ( 一 )
  11. linux常用操作命令
  12. ZooKeeper之(二)数据模型
  13. pair project elevator
  14. js 实现滚动字幕
  15. php模板引擎之blade
  16. C#编码习惯谈
  17. 20172308 实验三《Java面向对象程序设计 》实验报告
  18. CCleaner如何禁用开机自动启动
  19. 动态执行SQL语句,接收返回值
  20. FIsherman丶Team

热门文章

  1. Java去除掉HTML里面所有标签的两种方法——开源jar包和自己写正则表达式
  2. 解析 iOS 动画原理与实现
  3. Mosaic HDU 4819 二维线段树入门题
  4. 1.5.3 什么是Tokenizer-分词
  5. IOS 区分缓存 内存 物理存储 逻辑存储
  6. C++模拟Java“内部”类
  7. 【Android 界面效果44】Android之圆头像实例
  8. JAVA xml 流方式读取。数据挖掘大文件预处理。
  9. web 分类 和使用Dreamweaver
  10. 正则转nfa:完成