来源头文件:#include
int getopt_long(int agrc, char * const argv[], const char *optstring, const struct option *longopts, int *longindex)
optstring:短选项组成的字符串
option结构数组,option结构称为长选项表,其声明如下:
struct option {
const char *name;//长选项名字
int has_arg;//有无参数,见参数列表
int *flag;//NULL,getopt_long返回val字段的值, not NULL, getopt_long返回0
int val;//短选项。如果flag是NULL,那么val通常是个字符常量,如果短选项和长选项一致,那么该字符就应该与optstring中出现的//这个选项的参数相同;
};
has_arg参数列表:
符号常量 数值 含义
no_argument 0 选项没有参数
required_argument 1 选项需要参数
optional_argument 2 选项参数是可选的
int val:
如果flag是NULL,那么val通常是个字符常量,如果短选项和长选项一致,那么该字符就应该与optstring中
出现的这个选项的参数相同;
Linux 命令行约定:
几乎所有的GNU/Linux程序都遵循一些命令行参数定义的约定。程序希望出现的参数可以分成两种:选
项(options or flags)、其他类型的的参数。Options修饰了程序运行的方式,其他类型的参数则提供了输
入(例如,输入文件的名称)。
对于options类型参数可以有两种方式:
1)短选项(short options):顾名思义,就是短小参数。它们通常包含一个连字号和一个字母(大写
或小写字母)。例如:-s,-h等。
2)长选项(long options):长选项,包含了两个连字号和一些大小写字母组成的单词。例如,--
size,--help等。
*注:一个程序通常会提供包括short options和long options两种参数形式的参数。
对于其他类型参数的说明:
这种类型的参数,通常跟随在options类型参数之后。例如,ls –s /功能为显示root目录的大小。’/
’这个参数告诉ls要显示目录的路径。
例如在webbench开源项目中
staticconststruct option long_options[] ={
{"force", no_argument, &force, 1 },
{"reload", no_argument, &force_reload, 1 },
{"time", required_argument, NULL, 't' },
{"help", no_argument, NULL, '?' },
{"http09", no_argument, NULL, '9' },
{"http10", no_argument, NULL, '1' },
{"http11", no_argument, NULL, '2' },
{"get", no_argument, &method, METHOD_GET },
{"head", no_argument, &method, METHOD_HEAD },
{"options", no_argument, &method, METHOD_OPTIONS },
{"trace", no_argument, &method, METHOD_TRACE },
{"version", no_argument, NULL, 'V' },
{"proxy", required_argument, NULL, 'p' },
{"clients", required_argument, NULL, 'c' },
{ NULL,0, NULL, 0 }};
optstring = "912Vft:p:c:?h",其中-tpc代表后面要接参数
表示通式: character+':' 表示需要有参数
character+'::' 表示参数是可选择的
character+''表示无参数
例子: optstring = "abc:dfL::lnhd:e:p:l"
-abdflnhl:无参数
-cLdep:有参数
-L:有可选择的参数