赞
踩
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 */
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。