转载出处:blog.youkuaiyun.com/bailyzheng/article/details/8048733
最近用到一个命令行工具,之前也一直说想把命令行参数解析看一下,今天算是做一个小的总结。
命令行参数解析分类:单个字符的参数(-a -b),还有字符串参数(--video --audio)
函数声明:int getopt(int argc, char * const argv[], const char *optstring);
可以解析单个字符选项, optstring通常写成“a:b:c:”这种形式的。
用法:
1.前两个参数好理解,直接传入main(int argc,char **argv)中的两个参数就可以了。第三个参数写成我们需要的选项字符串就可以。
2.函数返回值:当匹配到的时候返回相应的字符常量,匹配完成之后返回-1.没有匹配到返回‘?’.
3.通常我们对返回值用一个switch做判断,然后接上相应的处理就可以了。
函数声明:int getopt_long(int argc, char * const argv[], const char *optstring, const struct option *longopts, int *longindex);
这个函数和上面函数差不多,但是可以支持长选项的命令行解析。比如“--video”之类的。
用法:
1.同样的使用,optstring是选项参数字符串。
2.struct option 是用来定义长选项的。定义如下:
struct option{
char *name;
int has_arg;
int *flag;
int val;
}
通常这个结构体我们这样写
strutc option options{
{"video", required_argument, NULL, 'v'};
{NULL, 0, NULL, 0};
}
这句话的意思就是
(1).定义了一个长选项“video”(注意这里不需要加一对短横线。),
(2).required_argument数值为1表示选项后面需要加参数。
(3).NULL表示,匹配到符合的选项之后,函数返回的是val也就是最后一个参数的值。
(4).最后一个参数'v'表示的意思就是,假如有短选项'-v',那么命令行输入-v与--video表示的是一个意思,如果这个长选项没有对应的短选项一致的话,那就写0就可以了。
3.longindex这个参数我们一般可以写成NULL,但是有时候我们需要知道这个值,比如,我们--video; --video-format; --video-color;有着三个可选的长选项,那么对于后面两者而言,getopt_long返回值都是0,那么我们怎么区分呢,这时候可以通过options[longindex].name来区分是video-format 还是video-color,所以这个时候这个参数就有很重要的用处了。
好了,大体上的这两个命令行的解析函数就分析到这了,接下来再写一篇关于匹配命令行参数的正则表达式的文章。