linux 中getopt和getopt_long 用法解析

来源:互联网 发布:centos 安装jdk1.7 编辑:程序博客网 时间:2024/05/17 21:41

linux 英文手册:
http://man7.org/linux/man-pages/man3/getopt.3.html
参考博客:
http://blog.csdn.net/lyh66/article/details/50098739

getopt解析参数

运行main(argc,argv),使用getopt(argc,argv,optstring)解析参数
参数optstring为选项字符串, 告知 getopt()可以处理哪个选项以及哪个选项需要参数,如果选项字符串里的字母后接着冒号“:”,则表示还有相关的参数。
如getopt(argc, argv, “ls:fc:h::d:”)中,l和f 选项不需要参数,s,c,d需要参数,h可以有参数也可以没有参数。
如在命令行:gcc -o main main.c
main -l -s aa -f -c kk

1.单个字符,表示选项,l,s,f,c,h,d均为选项
2.单个字符后接一个冒号:表示该选项后必须跟一个参数,参数紧跟在选项 后或者以空格隔开,该参数的指针赋给optarg
3.单 个字符后跟两个冒号,表示该选项后可以跟一个参数,也可以不跟。如果跟一个参数,参数必须紧跟在选项后不能以空格隔开,如果没有跟参数,则 optarg=NULL。

返回值

getopt()每次调用会逐次返回命令行传入的参数,当没有参数的最后的一次调用时,getopt()将返回-1
当解析到一个不在optstring里面的参数,或者一个必选值参数不带值时,返回’?’
其 它情况可以看上边链接,例子也可以看上边链接

getopt_long解析参数

int getopt_long(int argc, char * const argv[],                  const char *optstring,                  const struct option *longopts, int *longindex);

getopt_long除了可以支持-开始的单字符开始选项,还支持–开始选项。如果只支持–开始选项,将optstring设置为”“。

struct option {    const char *name;    int         has_arg;    int        *flag;    int         val;};

结构体option各个字段的意思如下:
name 长选项的名字
has_arg
no_argument(或0):选项不携带参数;required_argument(或1):选项需要参数;optional_argument(或2):选项携带参数可选
flag
指定该长选项的返回值。如果flag是NULL,getopt_long会返回val。(比如,调用者可以设置val为短选项字符)否则,getopt_long会返回0,且flag指向的值设置为val的值,前提是该选项成功找到了。
val
当做返回值,或把值加载进flag所指的内存中。

longopts指向的数组的最后一个元素值都设置为0。

如果longindex不是NULL,则它指向getopt_long()获得的长选项longopts的下标。

0 0