当前位置:   article > 正文

getopt(分析命令行参数)

fgets getopt
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即可。返回值  如果找到符合的参数则返回此参数字母,如果参数不包含在参数optstring 的选项字母则返回“?”字符,分析结束则返回-1。范例  #include<stdio.h>#include<unistd.h>int main(int argc,char **argv){int ch;opterr = 0;while((ch = getopt(argc,argv,”a:bcde”))!= -1)switch(ch){case ‘a’:printf(“option a:’%s’/n”,optarg);break;case ‘b’:printf(“option b :b/n”);break;default:printf(“other option :%c/n”,ch);}printf(“optopt +%c/n”,optopt);}执行  $./getopt –boption b:b$./getopt –cother option:c$./getopt –aother option :?$./getopt –a12345option a:’12345/* 自己写的测试 代码 */#include<string.h>#include<stdio.h>#include<unistd.h>static int opt_a=0;static int opt_b=0;static int opt_c=0;static int opt_d=0;static int opt_e=0;static char * opt_a_arg=NULL;static void usage(){        fprintf(stderr,"Usage:getopt [a arg] [b] [c] [d] [e]/n");        exit(1);}int main(int argc,char **argv){         int opt;         char opts[]="a:bcde";         opterr = 0;         while((opt = getopt(argc,argv,opts)) != -1){                 switch(opt)                 {                         case 'a':                                 opt_a=1;                                 opt_a_arg=strdup(optarg);                                 break;                         case 'b':                                 opt_b=1;                                 break;                         case 'c':                                 opt_c=1;                                 break;                         case 'd':                                 opt_d=1;                                 break;                         case 'e':                                 opt_e=1;                                 break;                         case '?':                                 usage();                                 break;                 }         }         if(opt_a || opt_b || opt_c|| opt_d || opt_e)         {                 if(opt_a)                         printf("opt a is set and arg is %s /n",opt_a_arg);                 if(opt_b)                         printf("opt b is set/n");                 if(opt_c)                         printf("opt c is set /n");                 if(opt_d)                         printf("opt d is set /n");                 if(opt_e)                         printf("opt e is set /n");         }else                 usage();}/* Glib C 的getopt源代码文件中 自带的测试的代码 */#ifdef TEST/* Compile with -DTEST to make an executable for use in testing    the above definition of `getopt'.   */intmain (int argc, char **argv){   int c;   int digit_optind = 0;   while (1)     {       int this_option_optind = optind ? optind : 1;       c = getopt (argc, argv, "abc:d:0123456789");       if (c == -1)         break;       switch (c)         {         case '0':         case '1':         case '2':         case '3':         case '4':         case '5':         case '6':         case '7':         case '8':         case '9':           if (digit_optind != 0 && digit_optind != this_option_optind)             printf ("digits occur in two different argv-elements./n");           digit_optind = this_option_optind;           printf ("option %c/n", c);           break;         case 'a':           printf ("option a/n");           break;         case 'b':           printf ("option b/n");           break;         case 'c':           printf ("option c with value `%s'/n", optarg);           break;         case '?':           break;         default:           printf ("?? getopt returned character code 0%o ??/n", c);         }     }   if (optind < argc)     {       printf ("non-option ARGV-elements: ");       while (optind < argc)         printf ("%s ", argv[optind++]);       printf ("/n");     }   exit (0);}#endif /* TEST */ 
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/811962
推荐阅读
相关标签
  

闽ICP备14008679号