首页 > 其他 > 详细

getopt函数

时间:2015-06-27 16:16:32      阅读:110      评论:0      收藏:0      [点我收藏+]

本文章基于http://jesserei.blog.163.com/blog/static/121411689200983081421390/ ,稍微进行了修改

通常 Linux 下的各种命令都有许多的命令行参数可以选择,比如:
gcc -g -lm foo.c -o foo 
getopt()就是用来分析命令行参数的函数。
在继续讨论getopt 之前,先要明确两个概念:选项(option) 和 选项参数(argument)。
在上面的例子中,-g 中的 g,-o 中的 o 还有 -lm 中的 l 就是选项,而 -lm 中的 m 就是 l 的选项参数,-o foo 中的 foo 就是 o 的选项参数。因此,我们知道了选项有两种,一种是带选项参数的,另一中是不带选项参数的。
下面我们就可以继续讨论 getopt() 了。

首先是函数声明:
#include  <unistd.h>
extern char *optarg;
extern int optind;
extern int optopt;
extern int opterr;
extern int optreset;
int getopt(int argc, char * const *argv, const char *optstring);

getopt()每调用一次返回一个选项。
argc 和 argv 很显然就是 main 函数的两个参数。
字符串 optstring 可以包含下列元素:单个字符,字符后面接一个冒号说明后面跟随一个选项参数,字符后面接两个冒号说明后面跟随一个可有可无的选项参数。例如,一个选项字符 "x" 表示选项 "-x" ,选项字符 "x:" 表示选项和其参数 "-x argument",选项字符 "x::" 表示选项 x 的参数是可选的(要注意可选值的参数的值与参数之间不能有空格,必须写成-ddvalue这样的格式,如果写成-d dvalue这样的格式就会解析错误)(“::” 是 GNU 增加的,不一定在所有的UNIX 系统下都可以使用)。
getopt()的返回后,如果有选项参数的话 optarg 指向选项参数,并且变量 optind 包含下一个 argv 参数作为对 getopt() 下一次调用的索引。变量 optopt 保存最后一个由 getopt() 返回的已知的选项。
当参数列已经到结尾时getopt()函数返回-1,当遇到一个未知的选项时 getopt 返回‘?‘。参数列中选项的解释可能会被‘--‘取消,由于它引起 getopt()给参数处理发送结束信号并返回-1。
比如:
./getopt -a -- -c -b foo
getopt 的源代码在下面,getopt 将只会解释到 -a。

 

下面是一个简单的例子:

 

[cpp] view plaincopy
 
  1. #include <stdio.h>  
  2. #include <unistd.h>  
  3.   
  4. int main(int argc, char * argv[])  
  5. {  
  6.         int aflag=0, bflag=0, cflag=0;  
  7.         int ch;  
  8.         // opterr = 0;  
  9.         while ((ch = getopt(argc, argv, "ab:cd::")) != -1)  
  10.         {  
  11.                 printf("optind: %d\n", optind);  
  12.                 switch (ch) {  
  13.                         case ‘a‘:  
  14.                         printf("HAVE option: -a\n");  
  15.                         aflag = 1;  
  16.                         break;  
  17.   
  18.                         case ‘b‘:  
  19.                         printf("HAVE option: -b\n");  
  20.                         bflag = 1;  
  21.                         printf("The argument of -b is %s\n", optarg);  
  22.                         break;  
  23.   
  24.                         case ‘c‘:  
  25.                         printf("HAVE option: -c\n");  
  26.                         cflag = 1;  
  27.                         break;  
  28.   
  29.                         case ‘d‘:  
  30.                         printf("HAVE option: -d\n");  
  31.                         printf("The argument of -d is %s\n", optarg);  
  32.                         cflag = 1;  
  33.                         break;  
  34.   
  35.                                 case ‘?‘:  
  36.                         printf("Unknown option: %c\n",(char)optopt);  
  37.                         break;  
  38.                 }  
  39.         }  
  40. }  

 

 

 

程序很简单,在此就不作解释了。

 

变量opterr和optind都被初始化为1。如果想要略去命令行的前几个参数,可以在调用getopt()前将optind设成其他值。
如果不希望getopt()输出出错信息,将全域变量 opterr 设为 0 即可。

getopt函数

原文:http://www.cnblogs.com/QingCHOW/p/4604064.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!