以前在linux的shell下运行程序时也带过参数,在参数的处理上是自己写个简单的解析函数来处理argv[]的,显得很麻烦而且笨拙。今天学习代码时才发现有个getopt函数可以轻松的处理命令行参数。难怪linux的那些程序的参数处理都做的很强大。比如ls -al --color=auto,ls --help。
首先用man 3 getopt看了下函数的手册,结合附带的代码还是没能完全明白。搜了一下发现ibm的developerWorks上有一篇文章介绍的很好:《使用 getopt() 进行命令行处理》。这里插一句,ibm的这个站点有很多中外的工程师写的技术文章,质量都相当高的,推荐一下。看完这篇文章后,自己写了个简单的,就知道getopt如何使用的,如下:
int main( int argc, char *argv[] ) { int opt = 0; opt = getopt( argc, argv, "a:b::h"); while( opt != -1 ) { switch( opt ) { case 'a': printf("a~~:%s\n",optarg); break; case 'h': printf("help\n"); break; case 'b': printf("b~~:%s\n",optarg); default: printf("def\n"); break; } opt = getopt(argc,argv,"a:b::h"); } }
正确的使用如下:
bash-4.2# ./main -a 45 -h -b23
a~~:45
help
b~~:23
def
当然,最好将help写的详细一些。
有些参数选项后面不接冒号,有些接一个冒号,有些接两个冒号。
1.单个字符,表示选项,不接参数的。
2.单个字符后接一个冒号:表示该选项后必须跟一个参数。参数紧跟在选项后或者以空格隔开。该参数的指针赋给optarg。
3 单个字符后跟两个冒号,表示该选项后必须跟一个参数。参数必须紧跟在选项后不能以空格隔开。该参数的指针赋给optarg。