函数说明
//函数原型,定义在<unistd.h>
int getopt(int argc, char * const argv[], const char *optstring);
//描述:getopt是用来解析命令行选项参数的,但是只能解析短选项: -d 100,不能解析长选项:--prefix
//参数:argc:main()函数传递过来的参数的个数
//argv:main()函数传递过来的参数的字符串指针数组
//optstring:选项字符串,告知 getopt()可以处理哪个选项以及哪个选项需要参数
//返回值:若选项成功找到,返回选项字母;如果所有命令行选项都解析完毕,返回-1;如果遇到字符串不在optstring里,返回字符'?'
optstring参数
char *optstring = “ab:c::”;
单个字符a 表示选项a没有参数 格式:-a即可,不加参数
单字符加冒号b: 表示选项b有且必须加参数 格式:-b 100或-b100,但-b=100错
单字符加2冒号c:: 表示选项c可以有,也可以无 格式:-c200,其它格式错误
一些执行getopt生效的全局变量
optarg —— 指向当前选项参数(如果有)的指针。
optind —— 再次调用 getopt() 时的下一个 argv指针的索引。
optopt —— 最后一个未知选项。
opterr —— 如果不希望getopt()打印出错信息,则只要将全域变量opterr设为0即可。
其他
处理长选项参数,可以使用类似的函数:getopt_long
代码示例
#include<stdio.h>
#include<unistd.h>
int main(int argc,char* argv[]){
int ret;
while( (ret = getopt(argc, argv, "ab:c::")) != -1 ){ //一般处理方式为循环处理,直到返回值为-1
switch (ret)
{
case 'a':
printf("a=%s", optarg);
printf("\t nextIndex=%d\n", optind);
break;
case 'b':
printf("b=%s", optarg);
printf("\t nextIndex=%d\n", optind);
break;
case 'c':
printf("c=%s", optarg);
printf("\t nextIndex=%d\n", optind);
break;
case '?':
default:
printf("default\n");
break;
}
}
}