//函数原型,定义在<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; } } }