简介:
#include <getopt.h>
-
getopt 被用来解析命令行选项参数,不用自己写代码处理argv。其中比较重要的函数是getopt()和getopt_long().
-
main(int argc, char* argv[]), C程序启动代码调用main()时,会对命令行进行处理,argc 参数计数,argv包含执行参数的指针数组。
1. 函数-getopt() 说明:
getopt(int argc, char* argv[],const char *optstring)
作用:
- getopt()处理以“-”开头的命令行参数,在命令行选项参数中再也检查不到optstring 中包含的选项时,返回-1.
- optind 存储第一个不包含选项的命令行参数。该函数适用于短参数名使用。
参数介绍:
参数说明:
- 单个字符表示选项
- 单个字符后接一个冒号:表示该选项后必须跟一个参数,且该参数跟在选项后或以空格隔开。
- 单个字符后跟两个冒号,表示该选项后必须跟一个参数,且该参数必须紧跟在选项后,不能有空格隔开。
上述参数的指针赋给optag (GUN 扩展特性)
getopt() 所设置的全局变量包括:
optarg——指向当前选项参数(如果有)的指针(optarg不需要定义,在getopt.h中已经有定义)。
optind——再次调用 getopt() 时的下一个 argv 指针的索引。
optopt——最后一个已知选项。可以重复调用 getopt(),直到其返回 -1 为止
getopt() 举例说明:
比如: getopt(int argc, char* argv[],”ab:c::d”);
getopt.exe -a -b b_parameter –cc_parameter -d
注意:getopt 会重新排列命令行参数顺序,将不包含的选项的命令行参数排到最后。
2. 函数getopt_long() 函数说明:
int getopt_long(int argc, char* const agrv[],const char *optstring, const struct option *longopts, int *longindex)
作用:
长参数名时使用。必须包含unistd.h 头文件。
参数说明:
struct option{
const char *name; //长参数名
int has_arg; //has_arg 有3个取值,no_argument(或0) 表示该参数后面不跟参数值;//required_argument (或1)表示该参数后面一定要跟个参数值;// optional_argument(或2)表示该参数后面可以跟,也可以不跟参数值。
int *flag; //决定getopt_long() 返回值到底是什么?如果flag设置为NULL,则getopt_long() 返回val 中的值,否则用val 填充flag 执行的值。
Int val; //和flag 联合决定返回值。
}
常用demo:
main(int argc, char* argv[])
{
…
while(true)
{
ic= getopt_long(argc, argv, “ ”,option_long,&longindex);
if(ic==-1)
break;
switch(ic)
{
case xxx:
break;
……
default:
usage();
break;
}
}
}
再如: