头文件:/usr/include/getopt.h
函数传入较长参数
函数getopt_long_only
和getopt_long
两者用法差不多,都可以用来解析命令行选项
函数出处
#include <getopt.h> //getopt_long()头文件位置
int getopt_long (int ___argc, char *const *___argv,
const char *__shortopts,
const struct option *__longopts, int *__longind);
int getopt_long_only (int ___argc, char *const *___argv,
const char *__shortopts,
const struct option *__longopts, int *__longind);
短选项 | 长选项 | 是否需要参数 | |
---|---|---|---|
-n | –username | 是(用户名) | |
-d | –debug | 否 |
参数
-
argcv,argv :main函数传递的参数
-
shortopts:短项字符串,如
"hn:jk:p:s:o:m:ti:va"
,短项字符串不需要’-‘标记,短选项需要传递参数的时候后面加上’:’ -
longopts,长选项数组,存放长选项参数
struct longopts{ const char *name;//长选项名 int has_arg;//是否需要参数 int * flag; int val; };
-
longind:于返回长选项在longopts结构体数组中的索引值,用于调试。一般置为NULL
har_arg 选项有三种情况
define no_argument 0 //不需要参数
define required_argument 1 //必须指定参数
define optional_argument 2 //参数可选
flag和val相互依赖,主要有如下情况
- flag为NULL,val值用于确定该长选项,所以需要为长选项指定唯一的val值。这里也为长选项和短选项建立了桥梁
- flag不为NULL,则将val值存放到flag所指向的存储空间,用于标识该长选项出现过
返回值
- 程序中使用短选项,则返回短选项字符(如‘n’),当需要参数是,则在返回之前将参数存入到optarg中
- 程序中使用长选项,返回值根据flag和val确定。当flag为NULL,则返回val值。所以根据val值做不同的处理,这也说明了val必须唯一。当val值等于短选项值,则可以使用短选项解析函数解析长选项;当flag不为NULL,则将val值存入flag所指向的存储空间,getopt_long返回0
- 出现未定义的长选项或者短选项,getopt_long返回?
- 解析完毕,getopt_long返回-1
全局参数:可以用在头文件作用域处
extern char * optarg
用于获取以上解析函数识别的参数选项后的数值extern int optind
获取以解析函数执行过程中的剩余参数个数。extern int opterr
解析函数遇到无法解析的命令,会将错误标记0返回至该值extern int optopt
为解析函数设置一个未识别的字符选择