在C语言中,有时需要对在运行时加上命令行参数,那么如何对命令行传入的参数做解析和处理呢?
getopt()
函数是一个标准库调用,可允许您使用直接的 while/switch 语句方便地逐个处理命令行参数和检测选项(带或不带附加的参数)。与其类似的 getopt_long()
允许在几乎不进行额外工作的情况下处理更具描述性的长选项,这非常受开发人员的欢迎。
实例1 getopt.c使用getopt():
#include <stdio.h> #include <unistd.h> int main(int argc,char *argv[]) |
运行命令:./getopt -a 11 -b22 -e -f
optind:3
optarg:11
ch:a
option a:'11'
optopt+
optind:4
optarg:22
ch:b
option b:'22'
optopt+
optind:5
optarg:(null)
ch:e
option e
optopt+
optind:6
optarg:(null)
ch:?
other option:?
optopt+f
说明:getopt()函数的原型为getopt(int argc,char *const argv[],const char *optstring)。
其中argc和argv一般就将main函数的那两个参数原样传入。
optstring是一段自己规定的选项串,例如本例中的"a:b::cde",表示可以有,-a,-b,-c,-d,-e这几个参数。
“:”表示必须该选项带有额外的参数,全域变量optarg会指向此额外参数,“::”标识该额外的参数可选(带的额外参数必须紧挨着该选项,有些Uinx可能不支持“::”)。
全域变量optind指示下一个要读取的参数在argv中的位置。
如果getopt()找不到符合的参数则会印出错信息,并将全域变量optopt设为“?”字符。
如果不希望getopt()印出错信息,则只要将全域变量opterr设为0即可。
实例2 getopt_long.c使用getopt_long():
#include <stdio.h> #include <getopt.h> int do_name, do_gf_name; struct option longopts[] = { int main(int argc, char *argv[]) |
运行命令:./getopt_long --name --gf_name --love forever
My name is Jay.
Her name is Afra.
Our love is forever!
最详细的参考资料,见:
http://blog.chinaunix.net/u/7040/showart_244389.html 写得非常的好,很详细的
http://zhangxuming.blog.51cto.com/1762/126785