标签:
在讨论这个函数之前我们先理解两个概念:选项及其参数
gcc -o program program.c
在上述命令中 -o 就是其选项 program就是参数。
getopt();
头文件:
#include<unistd.h>
函数原型:
int getopt(int argc,char * const argv[ ],const char * optstring);
argc为参数个数,argv是一个指针数组。
外部变量
extern char *optarg; //选项的参数指针,指向下一个要扫描的参数
extern int optind, //索引为下一个要处理的指针的下标
extern int opterr, //当opterr=0时,getopt不向stderr输出错误信息;相反,不为0,就会向sterr打印一条错误信息
extern int optopt; //用于储存错误或不可知的信息,当命令行选项字符不包括在optstring中或者选项缺少必要的参数时,该选项存储在optopt,getopt返回问号(?)。
optstring参数所做的规定
1.单个字符,表示选项,
2.单个字符后接一个冒号(:)表示该选项后必须跟一个参数。参数紧跟在选项后或者以空格隔开。该参数的指针赋给optarg。
3 单个字符后跟两个冒号(::),表示该选项后的参数可有可无。如果有,则参数必须紧跟在选项后不能以空格隔开。该参数的指针赋给optarg。
e.g.
/*getopt.c*/
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<unistd.h> 4 int main(int argc,char *argv[]) 5 { 6 int opt; 7 while((opt=getopt(argc,argv,"ab:c::"))!=-1){ 8 switch(opt){ 9 case ‘a‘: 10 printf("option: %c\n",opt); 11 break; 12 case ‘b‘: 13 printf("optarg1: %s\n",optarg); 14 break; 15 case ‘c‘: 16 printf("optarg2: %s\n",optarg); 17 break; 18 case ‘?‘: 19 printf("unknown option :%c\n",optopt); 20 break; 21 } 22 } 23 for(;optind<argc;optind++) 24 printf("argument: %s\n",argv[optind]); 25 exit(0); 26 }
编译 gcc -o getopt getopt.c
第一次运行 ./getopt -a -b "i am ok" -c
结果
option: a
optarg1: i am ok
optarg2: (null)
第二次运行 ./getopt -a -b "i am ok" -c"I AM OK"
结果
option: a
optarg1: i am ok
optarg2: I AM OK
标签:
原文地址:http://www.cnblogs.com/weiyongjian/p/4746438.html