以前写一些调试程序的时候解析命令都是使用strtok作分割再判断,偶然间看到由一个getopt函数,可以很快的实现这个功能。
#include <unistd.h>
int getopt(int argc, char * const argv[], const char *optstring);
extern char *optarg;
extern int optind,;
extern int opterr;
extern int optopt;
该函数的argc和argv参数通常直接从main()的参数直接传递而来
optstring是选项字母组成的字串,如果该字串里的任一字符后面有冒号,那么这个选项就要求有选项参数
举个例子
#include <unistd.h>
#include <stdio.h>
int main (int argc, char **argv)
{
int ch;
while((ch = getopt(argc, argv, "n:a:")) != -1)
{
switch(ch)
{
case 'n':
printf("My name is %s\n",optarg);
break;
case 'a':
printf("My age is %s\n",optarg);
break;
case '?':
printf("error!!\n");
break;
}
}
return 0;
}
[root@kk test]# ./test -n xiaoliu -a 20
My name is xiaoliu
My age is 20
getopt错误行为,会返回"?"
1、命令行选项无效
2、缺少参数