getopt_long(int argc,char * const argv[],const char * shortopts,const struct option *longopts,int *longindex)
下面介绍各个参数的含义:
const char *name;
int has_arg;
int *flag;
int val;
};
{ "help" , 0, NULL, 'h' },
{ "output" , 1, NULL, 'o' },
{ "version" , 0, NULL, 'v' },
{ NULL, 0, NULL, 0 }
};
1 每碰到一个命令行参数,optarg都会记录它
'?' 无效选项
':' 缺少选项参数
'x' 选项字符'x'
-1 选项解析结束
一般的用法为while(getopt_long() != -1){},可以通过switch语句来对该函数不同的返回值(即不同的短选项)调用不同的处理函数。
#include <stdio.h>
#include <unistd.h>
#define _GNU_SOURCE
#include <getopt.h>
int main(int argc,char *argv[])
{
int opt;
struct option longopts[] = {
{"initialize",0,NULL,'1'},
{"file",1,NULL,'f'},
{"list",0,NULL,'1'},
{"restart",0,NULL,'r'},
{0,0,0,0}}:
while((opt = getopt_long(argc, argv, "if:lr", longopts, NULL)) != -1){
switch(opt){
case 'i':
case 'l':
case 'r':
printf("option: %c\n",opt);
break;
case 'f':
printf("filename: %s\n",optarg);
break;
case ':':
printf("option needs a value\n");
break;
case '?':
printf("unknown option: %c\n",optopt);
break;
}
for(; optind < argc; optind++){
printf("argument: %s\n",argv[optind]);
}
exit(0);
}