getopt函数概述
getopt函数用于解析命令行参数
/**
* 解析命令行参数
* @param argc 对应main函数argc
* @param argv 对应main函数argv
* @param optstring 定义选项需求字符串
* @return 有效选项字符串 -1:所有选项解析完毕 ?:遇到未知选项(默认会打印错误) :缺少参数(默认会打印错误)
*/
int getopt(int argc, char * const argv[], const char *optstring)
全局变量
getopt函数依赖的全局变量
optarg指向当前选项的指针(如果选项无参数则为NULL)optind下一个待处理的argv索引opterr控制是否显示错误信息(默认为1显示错误,设置为0表示不显示错误信息)optopt记录最后一个未知选项的字符
opstring参数格式
| 格式 | 说明 |
|---|---|
| 字符 | 表示一个无需参数的选项 |
| 字符: | 表示该选项必须带参数,参数可以相连也可以不相连(-a value 或 -avalue) |
| 字符:: | 表示该选项参数可选,如果带参数必须直接相连(-avalue) |
getopt(argc, argv, "ab:c::");
a表示一个无需参数的选项b表示该选项必须带参数c表示该选项参数可选
getopt_long函数概述
glibc 中的函数 getopt_long可以用来解析长选项。
#include <getopt.h>
int getopt_long(int argc, char * const argv[],
const char *optstring,
const struct option *longopts,
int *longindex);
参数说明
longopts为指向struct option数组的指针,定义长选项参数longindex返回长选项在longopts数组中的索引
struct option 结构体
struct option {
const char *name; // 长选项名称(如 "help")
int has_arg; // 参数需求: no_argument(无参数)、required_argument(必须带参数)、optional_argument(可选参数)
int *flag; // 控制返回值(NULL 表示直接返回 val)
int val; // 返回值(或写入 flag 的值)
};
// 定义长选项表
struct option long_options[] = {
{"help", no_argument, 0, 'h'}, // 对应 --help
{"verbose", no_argument, 0, 'v'}, // 对应 --verbose
{"config", required_argument, 0, 'c'}, // 对应 --config <file>
{0, 0, 0, 0} // 数组必须以全0元素结束
};