C库中提供了相应的函数接口供用户解析命令行选项,我们常使用的有getopt_long_only和getopt_long,在使用的方法上相差不大。 命令行选项中一般可以选择传递长选项和短选项 长选项的用法为: ./a.out --username bryant --help 短选项的用法为: ./a.out -n bryant -h -v 1. 函数接口 函数使用的头文件为 #include 2. 参数介绍 ? argc、argv : 从main函数传递而来。 ? shortopts : 短选项字符串。如“n:v”,短选项字符串不需要"-",而且短选项需要传递参数时,在短选项后面加上":"。 一般使用的时候,定义一个空的shortopts即可。 ? longopts : struct option 数组,用于存放长选项参数。 struct option { const char *name; //长选项名 int has_arg; //是否需要参数 int *flag; int val; }; has_arg的值有三种情况。 #define no_argument 0 #define required_argument 1 #define optional_argument 2 ? longind : 用于返回长选项在longopts结构体数组中的索引值,用于调试。一般置为NULL。 flag和val两个值相互依赖,主要分两种情况。 (1) flag为NULL时,val值用于确定该长选项,所以需要长选项指定唯一的val值。这里也为长选项和短选项建立了桥梁。 (2) flag不为NULL时,将val值存放到flag所指向的存储空间,用于标识该长选项出现过。 3. 返回值 ? 程序中使用短选项,则返回短选项字符,例如传递-n,如果需要参数,则将参数保存在optarg中。!optarg不需要定义,在getopt.h中已经有定义 ? 程序中使用长选项,则根据flag和val的值确定。当flag为NULL时,返回val值(val值必须唯一)。当value值等于短 选项的值时,可以使用短选项解析长选项;当flag不为NULL时,则将val值存入flag所指向的存储空间,此时getopt_long返回零。 ? 出现未定义的长选项或短选项,则返回? ? 解析完毕,getopt_long返回 -1; {"help", no_argument, 0, 0}, {"h", no_argument, 0, 0}, {0, 0, 0, 0} }; while ((c = getopt_long_only(argc, argv, optstring, opts, |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|