表头文件 #include
定义函数 int getopt(int argc,char * const argv[ ],const char * optstring);
getopt是用来分析命令行参数的,参数argc和argv是main函数传递的参数个数和内容。参数optstring为选项字符串,告知getopt可以处理哪个选项以及哪个选项需要参数,如果选项字符串里的字母后接着冒号":",则表示还有相关的参数,全局变量optarg即会指向此额外参数。如果在处理期间遇到了不符合optstring指定的选项getopt将显示一个错误信息,getopt的返回值为"?",将全局变量optarg设置为未知选项的那个字符,如果不希望getopt()打印出错信息,则只要将全局变量opterr设为0即可。
optarg-----------指向当前选项参数的指针。
optind-----------再次调用getopt()时的下一个argv指针的索引,默认为1
optopt-----------最后一个未知选项,默认为?,遇到未知选项后,变成未知选项字符
optstring中的指定的内容的意义(例如getopt(argc, argv, "ab:c:de::");)
1.单个字符,表示选项(如上例中的abcde各为一个选项)
2.单个字符后接一个冒号:表示该选项后必须跟一个参数。参数紧跟在选项后或者以空格隔开。该参数的指针赋给optarg。(如上例中的b:c:)
3 单个字符后跟两个冒号,表示该选项后可以跟一个参数,也可以不跟。如果跟一个参数,参数必须紧跟在选项后不能以空格隔开。该参数的指针赋给optarg。(如上例中的e::,如果没有跟参数,则optarg = NULL)
-
#include <unistd.h>
-
#include <stdio.h>
-
int main(int argc, char* argv[])
-
{
-
int aflag=0, bflag=0, cflag=0;
-
int ch;
-
printf("optind:%d,opterr:%d,optopt=%c\n",optind,opterr,optopt);
-
printf("--------------------------\n");
-
while ((ch = getopt(argc, argv, "ab:c:de::")) != -1)
-
{
-
printf("optind:%d,argc:%d,argv[%d]:%s,optopt=%c\n",optind,argc,optind,argv[optind],optopt);
-
switch (ch) {
-
case 'a':
-
printf("HAVE option: -a\n\n");
-
-
break;
-
case 'b':
-
printf("HAVE option: -b\n");
-
-
printf("The argument of -b is %s\n\n", optarg);
-
break;
-
case 'c':
-
printf("HAVE option: -c\n");
-
printf("The argument of -c is %s\n\n", optarg);
-
-
break;
-
case 'd':
-
printf("HAVE option: -d\n");
-
break;
-
case 'e':
-
printf("HAVE option: -e\n");
-
printf("The argument of -e is %s\n\n", optarg);
-
break;
-
-
case '?':
-
printf("Unknown option: %c\n",(char)optopt);
-
break;
-
}
-
}
-
printf("----------------------------\n");
-
printf("optind=%d,argv[%d]=%s,optopt=%c\n",optind,optind,argv[optind],optopt);
-
}
编译运行:
-
gwwu@hz-dev2.wgw.com:~/test>gcc -g getopt.c -o getopt
-
gwwu@hz-dev2.wgw.com:~/test>./getopt -a -k -b wgw -c tyx -d -e wjx -t
-
optind:1,opterr:1,optopt=?
-
--------------------------
-
optind:2,argc:11,argv[2]:-k,optopt=
-
HAVE option: -a
-
-
./getopt: invalid option -- 'k'
-
optind:3,argc:11,argv[3]:-b,optopt=k
-
Unknown option: k
-
optind:5,argc:11,argv[5]:-c,optopt=k
-
HAVE option: -b
-
The argument of -b is wgw
-
-
optind:7,argc:11,argv[7]:-d,optopt=k
-
HAVE option: -c
-
The argument of -c is tyx
-
-
optind:8,argc:11,argv[8]:-e,optopt=k
-
HAVE option: -d
-
optind:9,argc:11,argv[9]:wjx,optopt=k
-
HAVE option: -e
-
The argument of -e is (null)
-
-
./getopt: invalid option -- 't'
-
optind:11,argc:11,argv[11]:(null),optopt=t
-
Unknown option: t
-
----------------------------
-
optind=10,argv[10]=wjx,optopt=t
-
gwwu@hz-dev2.aerohive.com:~/test>
阅读(659) | 评论(0) | 转发(0) |