getopt解析命令行选项

getopt, getopt_long, getopt_long_only, optarg, optind, opterr, optopt - Parse command-line options

       #include <unistd.h>
int getopt(int argc, char * const argv[], const char *optstring);
extern char *optarg;
extern int optind, opterr, optopt;

其中argc和argv等同于main函数参数。

命令行选项元素(an option element)一般以-开头,之后的字符就是命令行选项字符(option characters)。重复调用getopt(),可连续得到命令行选项元素中的选项字符。

optstring是包含选项字符的字符串。若一个字符后面有一个冒号(:),选项需要一个参数(argument),optarg指向选项字符后面的文本(如-oarg,指向arg)或后面的参数(如-o arg,指向arg)。

optind是下一个要处理的选项元素的索引。系统初始化optind为1,可以reset到1以重新扫描argv。

若getopt()找到另一个选项字符,返回该选项字符,并同时更新optind和nextchar。

若没有选项字符了,getopt()返回-1。optind是第一个不是选项元素的argv-element的索引。

两个冒号表示选项有一个可选的参数,有参数时optarg指向参数,无时为0。

默认情况下,getopt()打乱argv顺序,如此所有非选项参数都在最后(如gcc foo.c -Wall, foo.c被排到最后)。

若getopt()不识别选项字符,向stderr打印错误信息,并保存字符到optopt,返回‘?’。程序可以设置opterr为0来阻止错误消息。

若getopt()找到一个选项字符不在optstring,或选项少参数,返回‘?’,并设置optopt为实际字符。optstring的第一个字符是一个冒号(:),getopt()返回’:'来代替‘?’。

返回值

一个选项找到,getopt()返回选项字符。所有选项都解析完后,返回-1。

若一个选项不在optstring中,返回‘?’。

若选项少参数,返回值依赖于optstring第一个字符:若第一个字符为‘:’,返回‘:’,否则返回‘?’。

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h> int main(int argc, char * argv[])
{
int flags, opt;
int nsecs, tfnd; nsecs = ;
tfnd = ;
flags = ; while((opt=getopt(argc, argv, "nt:")) != -){
switch(opt) {
case 'n':
flags = ;
break;
case 't':
nsecs = atoi(optarg);
tfnd = ;
break;
default : /* '?' */
fprintf(stderr, "Usage: %s [-t nsecs] -n name\n", argv[]);
exit(EXIT_FAILURE);
}
}
printf("flags=%d; tfnd=%d; optind=%d\n", flags, tfnd, optind); if(optind >= argc){
fprintf(stderr, "Expected argument after options\n");
exit(EXIT_FAILURE);
} printf("name argument =%s\n", argv[optind]); exit(EXIT_SUCCESS);
}

最新文章

  1. Fiddler 使用备忘
  2. XE 的程序升级 XE5 问题处理记录
  3. Android 中this、getContext()、getApplicationContext()、getApplication()、getBaseContext() 之间的区别
  4. JPA入门例子(采用JPA的hibernate实现版本)
  5. php对二维数组进行相关操作(排序、转换、去空白等)
  6. IntelliJ UI安装
  7. SAS Config文件 处理流程
  8. Setting Up the ADT Bundle
  9. skymvc网站测试之mysql数据生成
  10. 写一方法计算实现任意个整数之和.在主调函数中调用该函数,实现任意个数之和。(使用params参数)
  11. Java入门第二季第一章类和对象知识点
  12. express mongoose 新手上路 问题记录
  13. 关于js优化和css优化
  14. tsung: an open-source multi-protocol distributed load testing tool
  15. bi api 软件
  16. python学习笔记 tuple
  17. PV &amp; PVC - 每天5分钟玩转 Docker 容器技术(150)
  18. [AI开发]centOS7.5上基于keras/tensorflow深度学习环境搭建
  19. 阿里云对象存储OSS与文件存储NAS的区别
  20. Spark Streaming 实现思路与模块概述

热门文章

  1. 0x8002801D:库没有注册
  2. T-SQL 之 运算符
  3. object sender, LinkLabelLinkClickedEventArgs e 参数解释
  4. HDU4626+博弈
  5. UNIX网络编程读书笔记:pselect函数
  6. TP框架模板中IF Else 如何使用?
  7. Direct X和OpenGL是什么及有何区别
  8. mybatis常用标签
  9. 从P1到P7——我在淘宝这7年 - 子柳撰写
  10. 虚拟机运行Linux提示【此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态。】的问题