C语言getopt()函数的使用

转载 2016年05月30日 10:10:27

转自http://vopit.blog.51cto.com/2400931/440453

getopt(分析命令行参数)  
 
相关函数表头文件
        #include<unistd.h>
定义函数
        int getopt(int argc,char * const argv[ ],const char * optstring);
函数说明
        getopt()用来分析命令行参数。参数argc和argv是由main()传递的参数个数和内容。参数optstring 则代表欲处理的选项字符串。此函数会返回在argv 中下一个的选项字母,此字母会对应参数optstring 中的字母。如果选项字符串里的字母后接着冒号“:”,则表示还有相关的参数,全域变量optarg 即会指向此额外参数。如果getopt()找不到符合的参数则会印出错信息,并将全域变量optopt设为“?”字符,如果不希望getopt()印出错信息,则只要将全域变量opterr设为0即可。
 
短参数的定义
       getopt()使用optstring所指的字串作为短参数列表,象"1ac:d::"就是一个短参数列表。短参数的定义是一个'-'后面跟一个字母或数字,象-a, -b就是一个短参数。每个数字或字母定义一个参数。 
  其中短参数在getopt定义里分为三种:
  1. 不带值的参数,它的定义即是参数本身。
  2. 必须带值的参数,它的定义是在参数本身后面再加一个冒号。
  3. 可选值的参数,它的定义是在参数本身后面加两个冒号 。
  在这里拿上面的"1ac:d::"作为样例进行说明,其中的1,a就是不带值的参数,c是必须带值的参数,d是可选值的参数。
  在实际调用中,'-1 -a -c cvalue -d', '-1 -a -c cvalue -ddvalue', '-1a -ddvalue -c cvalue'都是合法的。这里需要注意三点:
  1. 不带值的参数可以连写,象1和a是不带值的参数,它们可以-1 -a分开写,也可以-1a或-a1连写。
  2. 参数不分先后顺序,'-1a -c cvalue -ddvalue'和'-d -c cvalue -a1'的解析结果是一样的。
  3. 要注意可选值的参数的值与参数之间不能有空格,必须写成-ddvalue这样的格式,如果写成-d dvalue这样的格式就会解析错误。

返回值
   getopt()每次调用会逐次返回命令行传入的参数。
   当没有参数的最后的一次调用时,getopt()将返回-1。
    当解析到一个不在optstring里面的参数,或者一个必选值参数不带值时,返回'?'。
   当optstring是以':'开头时,缺值参数的情况下会返回':',而不是'?' 。

optind 表示getopt吃掉的参数的数量+1
argv += optind - 1;
argc -= optind - 1;  表示过滤掉参数,如-c ,-d ,让argv最后只包含参数后面的值。

范例 

  1. #include <stdio.h>  
  2. #include <unistd.h>  
  3.  
  4. int main(int argc, int *argv[])  
  5. {  
  6.         int ch;  
  7.         opterr = 0;  
  8.         while ((ch = getopt(argc,argv,"a:bcde"))!=-1)  
  9.         {  
  10.                 switch(ch)  
  11.                 {  
  12.                         case 'a':  
  13.                                 printf("option a:'%s'\n",optarg);  
  14.                                 break;  
  15.                         case 'b':  
  16.                                 printf("option b :b\n");  
  17.                                 break;  
  18.                         default:  
  19.                                 printf("other option :%c\n",ch);  
  20.                 }  
  21.         }  
  22.         printf("optopt +%c\n",optopt);  
  23. }  

执行:

  1. $ ./getopt -a  
  2. other option :?  
  3. optopt +a  
  4. $ ./getopt -b  
  5. option b :b  
  6. optopt +  
  7. $ ./getopt -c  
  8. other option :c  
  9. optopt +  
  10. $ ./getopt -d  
  11. other option :d  
  12. optopt +  
  13. $ ./getopt -abcd  
  14. option a:'bcd' 
  15. optopt +  
  16. $ ./getopt -bcd  
  17. option b :b  
  18. other option :c  
  19. other option :d  
  20. optopt +  
  21. $ ./getopt -bcde  
  22. option b :b  
  23. other option :c  
  24. other option :d  
  25. other option :e  
  26. optopt +  
  27. $ ./getopt -bcdef  
  28. option b :b  
  29. other option :c  
  30. other option :d  
  31. other option :e  
  32. other option :?  
  33. optopt +f  

C语言中getopt()函数的使用方法

说起C语言中getopt()函数的使用方法,相信很多学习C++的朋友并不会陌生。本文将由达内的讲师详细为您介绍关于C语言中getopt()函数的使用方法的相关常识。    在Linux中,用命令行执...
  • zhq651
  • zhq651
  • 2013年01月11日 17:33
  • 2602

C语言getopt()函数的使用及参数

getopt(分析命令行参数)     相关函数表头文件         #include 定义函数         int getopt(int argc,char * c...
  • one423
  • one423
  • 2014年08月14日 14:38
  • 1040

C语言之getopt使用

在使用开源的程序时,随处可见程序可以接受输入的参数,比如著名的压测工具ab,使用的时候就可以输入如下命令:ab -c 100 -n 10000 http://www.37.com。这样就可以吧客户端数...
  • loophome
  • loophome
  • 2016年02月19日 20:43
  • 779

Linux c 开发 - 命令行参数和getopt方法的使用细节

命令行参数 在c语言的入口函数main方法中,可以添加两个参数:argc和argv。通过这两个参数,我们就可以在可执行文件执行的时候将自定义的参数传递到程序中。 看一个例子: #include ...
  • initphp
  • initphp
  • 2015年03月10日 21:52
  • 2143

getopt()用法详解

getopt被用来解析命令行选项参数。就不用自己写东东处理argv了。 #include extern char *optarg; //选项的参数指针 extern ...
  • kunikida
  • kunikida
  • 2013年05月13日 21:50
  • 5060

C语言 getopt()函数的使用

getopt(分析命令行参数)    相关函数表头文件         #include 定义函数         int getopt(int argc,char * const...
  • charliye
  • charliye
  • 2016年02月23日 09:14
  • 189

C语言getopt()函数的使用

getopt(分析命令行参数)     相关函数表头文件         #include 定义函数         int getopt(int argc,char * c...
  • liushuimpc
  • liushuimpc
  • 2015年06月25日 11:50
  • 211

C语言getopt()函数的使用

getopt(分析命令行参数)     相关函数表头文件         #include 定义函数         int getopt(int argc,char * c...
  • mydriverc2
  • mydriverc2
  • 2015年12月15日 16:17
  • 246

C语言getopt()函数的使用

getopt(分析命令行参数)     相关函数表头文件         #include 定义函数         int getopt(int argc,char * const argv...
  • u013525455
  • u013525455
  • 2016年11月28日 11:19
  • 117

C语言getopt()函数的使用

getopt(分析命令行参数)     相关函数表头文件         #include 定义函数         int getopt(int argc,char * c...
  • wuruixn
  • wuruixn
  • 2013年05月15日 15:50
  • 602
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言getopt()函数的使用
举报原因:
原因补充:

(最多只允许输入30个字)