getopt函数的作用是用来对命令行输入的参数进行处理。直接看例子。
1 源代码 getopt.c
#include <stdio.h>
#include <unistd.h>
int main(int argc, char **argv)
{
char optChar;
while(-1 != (optChar=getopt(argc, argv, "whn:")))
{
switch(optChar)
{
case 'w':
printf("Welcome!\n");
break;
case 'h':
printf("Hello!\n");
break;
case 'n':
printf("Hi, %s!\n", optarg);
break;
}
}
return 0;
}
2 运行结果
$ ./getopt -w
Welcome!
$ ./getopt -h
Hello!
$ ./getopt -n mjzhan
Hi, mjzhan!
$ ./getopt -hn mjzhan
Hello!
Hi, mjzhan!
3 对关键语句进行解释
optChar=getopt(argc, argv, "whn:")
3.1 getopt的输入参数
getopt有三个参数,前两个不多做解释。第三个"whn:"表示可以接收的参数为w,h和n,n后面多了个冒号表示n参数需要带上相应的参数字符串,而这个参数字符串是存储在外部全局变量optarg中的。
如上例的./getopt -n mjzhan。
3.2 getopt的返回值
getopt每次返回一个从命令行输入的参数,在本例中将返回值赋给optChar,然后再对optChar进行判断处理,有多个参数时需要使用循环来多次调用getopt函数。
如./getopt -hn mjzhan的运行结果有两行,就是分别对h和n这两个参数执行的结果。
当命令行输入的参数都读取完毕后,返回-1,本例中就表现为while循环退出。
经过上面的介绍,应该可以掌握getopt最基本的使用方法了。
4 参数错误处理
有人会问,如果我输入的参数不在whn三者之一,或者我输入的n参数后面没有跟参数字符串呢?上运行示例:
$ ./getopt -j
getopt: unknown option -- j
$ ./getopt -n
getopt: option requires an argument -- n
看到没,系统给出的提示还是很friend的。但有人会说,我需要自定义的提示!好了,做两件事就可以了
4.1 第一件事,让系统提示闭嘴
这个很简单,将"whn:"变成":whn:"就可以了,也就是前面加个冒号,自己去试试吧,这时候系统会很安静,没有任何错误提示。
4.2 第二件事,自定义提示
如果getopt能够返回某两个特定的值,一个告诉我参数错误,一个告诉我参数后面没有跟参数字符串,那么自定义提示就会很简单啊,多加两个case判断嘛!
确实有这两个返回值,参数错误的返回值是‘?',缺少参数字符串的返回值是':',那么新加的两个case如下:
case ':':
printf("Need optString!\n");
break;
case '?':
printf("Wrong opt!\n");
break;
好了,自己去运行一下吧,这时候就会给出自定义的提示了。
以上只是一些简单的用法,基本场合应该够了,更多的功能大家自己去研究了。