C++为自定义命令选项提供了专门的库:getopt.h。其中最重要的函数是:
int getopt_long(int argc, char * const argv[],
const char *optstring,
const struct option *longopts, int *longindex);
它的说明文档:https://linux.die.net/man/3/getopt_long
该文档里面详细介绍了函数中各个参数的意思,以及使用示例,非常清晰。如果看不懂英文文档,可以查看文档下半部分的用法说明,我会对该方法的用法进行一个归纳。
首先上一个测试用例:
测试用例
源码
#include <getopt.h>
#include <iostream>
using std::cout;
using std::endl;
int main(int argc, char *argv[])
{
int c;
//定义长参数选项,如--file
static struct option long_options[] =
{
{"file", required_argument,NULL,'f'},
{"check",no_argument, NULL,'c'},
{"load", no_argument, NULL,'l'}
};
//循环执行,确保所有选项都能得到处理
while(1)
{
int opt_index = 0;
//参数解析方法,重点
c = getopt_long(argc, argv,"cf:l", long_options,&opt_index);
if(-1 == c)
{
break;
}
//根据返回值做出相应处理
switch(c)
{
case 'c':
cout << "check data" << endl;
break;
case 'f':
cout << "file:" << optarg << endl;
break;
case 'l':
cout << "load data!" << endl;
break;
default:
cout << "???" << endl;
break;
}
}
}
编译运行:
[nigel@DevTJ-todo-1507091995 ~/app]$ g++ cmdArgument.cpp -o cmdArgument
[nigel@DevTJ-todo-1507091995 ~/app]$ ./cmdArgument -c -f logfile -l
check data
file:logfile
load data!
[nigel@DevTJ-todo-1507091995 ~/app]$ ./cmdArgument -c -l
check data
load data!
[nigel@DevTJ-todo-1507091995 ~/app]$ ./cmdArgument --check -l
check data
load data!
[nigel@DevTJ-todo-1507091995 ~/app]$ ./cmdArgument --check --load
check data
load data!
[nigel@DevTJ-todo-1507091995 ~/app]$ ./cmdArgument -f
./cmdArgument: option requires an argument -- 'f'
???
[nigel@DevTJ-todo-1507091995 ~/app]$ ./cmdArgument --file logfile
file:logfile
现在看不懂这个例子没关系,只有保留了该例子的印象即可。下面开始用法说明。