getopt_long原型

#define no_argument        0
#define required_argument 1
#define optional_argument 2 struct option {
const char *name; //名称,下面实例中使用的--help,--version
int has_arg; //是否有参数,可选0,1,2三个值,就是上面的那三个宏定义
int *flag; //返回值,传入的一个int指针,表示该参数的解析结果,如果是NULL,那么返回值就会被写到getopt_long的返回值中。
int val; //name的简写
}; #include <unistd.h> int getopt(int argc, char * const argv[],const char *optstring);
extern char *optarg;
extern int optind, opterr, optopt; #include <getopt.h>
int getopt_long(int argc, char * const argv[],
const char *optstring,
const struct option *longopts,
int *longindex); int getopt_long_only(int argc, char * const argv[],
const char *optstring,
const struct option *longopts,
int *longindex);

optstring就是下面程序中的:"hva:b:",就是那一群简写集合,后面带冒号意思(比如-a)就是这个-a后面要加参数。

getopt_long实例

经常为了写小程序的解析参数感觉麻烦,所以就写一个小函数模板以后复制用。

#include <getopt.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std; int discovery_options(int argc, char** argv, bool& show_help, bool& show_version,string& input)
{
int ret = ; static option long_options[] = {
{"help", no_argument, &ret, 'h'},
{"version", no_argument, , 'v'},
{"arga", required_argument , , 'a'},
{"argb", required_argument , , 'b'},
{, , , }
}; int opt = ;
int option_index = ;
while((opt = getopt_long(argc, argv, "hva:b:", long_options, &option_index)) != -){
switch(opt){
case 'h':
show_help = true;
break;
case 'v':
show_version = true;
break;
case 'a':
input = optarg;
break;
case 'b':
input = optarg;
break;
default:
show_help = true;
break;
}
}
// check values return ret;
} void help(char** argv){
printf("%s, Copyright (c) 2013-2015 BuguTian\n", argv[]);
printf(""
"Usage: %s <Options> <-a REQUEST>\n"
"-h no arg,mean help\n"
"-v no arg,mean version\n"
"-a arga\n"
"-b argb\n",
argv[]); exit();
}
void version()
{
printf("V1.1.1\n");
exit();
} int main(int argc, char** argv){
int ret = ;
bool show_help = false;
bool show_version = false;
string input="";
if((ret = discovery_options(argc, argv, show_help, show_version, input))){
printf("discovery options failed. ret=%d", ret);
return ret;
}
if(show_help){
help(argv);
}
if(show_version){
version();
}
printf("running...\n");
return ;
}

最新文章

  1. [LintCode] Longest Common Prefix 最长共同前缀
  2. 深入理解DOM节点类型第四篇——文档片段节点DocumentFragment
  3. URLDecoder解析url编码
  4. 使用VS Code 从零开始开发并调试.NET Core 应用程序
  5. [BI项目记]-搭建代码管理环境之签入代码
  6. Codeforces Round #375 (Div. 2)
  7. No matching provisioning profile found: Your build settings specify a provis...
  8. Struts 2.3.24源码解析+Struts2拦截参数,处理请求,返回到前台过程详析
  9. windows下ruby安装环境配置
  10. Xamarin Studio支持TypeScript开发
  11. SQL SERVER 2008安装时出现不能在控件上调用 Invoke 或 BeginInvoke错误 解决方法
  12. eclipse安装反编译插件
  13. HDU 1532 Drainage Ditches 排水渠(最大流,入门)
  14. mkimage工具 加载地址和入口地址 内核启动分析
  15. 《Javascript权威指南》学习笔记之十二:数组、多维数组和符合数组(哈希映射)
  16. oracle 查询
  17. StringTokenizer使用笔记
  18. mybatis-分页显示数据
  19. MyCP(课下作业,必做)- 20175218
  20. window service 2008 解决80端口占用

热门文章

  1. JavaScript 数据类型
  2. navigationController 返回前N个视图
  3. O365(世纪互联)SharePoint 之站点个性化
  4. 设置导航栏nav全透明
  5. 深入浅出React Native 1: 环境配置
  6. Android中asset和raw的区别
  7. iOS开发之聊天模块--内容保存逻辑实现
  8. ADO.NET五大对象理论和实践(草稿)
  9. MySQL如何导出带日期格式的文件
  10. Database 'xxxx' is being recovered. Waiting until recovery is finished.