#include
-
getopt 被用来解析命令行选项参数,不用自己写代码处理argv。其中比较重要的函数是getopt()和getopt_long().
-
main(int argc, char* argv[]), C程序启动代码调用main()时,会对命令行进行处理,argc 参数计数,argv包含执行参数的指针数组。
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(int argc, char* argv[],”ab:c::d”);
getopt.exe -a -b b_parameter –cc_parameter -d
注意:getopt 会重新排列命令行参数顺序,将不包含的选项的命令行参数排到最后。
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; } } }
再如:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)