打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
使用 Google gflags 简化命令行参数处理
(本文章仅适用于C++程序)
写服务程序时,如果需要提供命令行参数。传统的方法是手工解析argv参数,或者使用getopt函数。两种方法都比较费劲。使用Google gflags可以大大简化命令行参数处理。
安装gflag
从官方地址http://code.google.com/p/google-gflags/下载gflags并安装。比如我下载的是1.5版本。
[yichi@yichi tmp]$ tar zxvf gflags-1.5.tar.gz
[yichi@yichi tmp]$ cd gflags
[yichi@yichi gflags-1.5]$ ./configure –prefix=$HOME/google-library
[yichi@yichi gflags-1.5]$ make j=4 & make install
使用gflags
main.cc
// Copyright (c) 2011, D-Media Communication Technology Inc.
// All rights reserved.
//
//
// ---
// Author: Yichi Zhang <zyichi@gmail.com>
//
// File content description here
  
#include "server.h"
  
#include <google/gflags.h>
  
#include <string>
  
#include <stdio.h>
  
DEFINE_bool(memory_pool, false, "If use memory pool");
DEFINE_bool(daemon, true, "If started as daemon");
DEFINE_string(module_id, "", "Server module id");
  
DEFINE_int32(http_port, 80, "HTTP listen port");
DEFINE_int32(https_port, 443, "HTTPS listen port");
  
int
main(int argc, char** argv)
{
  ::google::ParseCommandLineFlags(&argc, &argv, true);
  
   
// XXX NOTE: Should add 'FLAGS_' prefix.
  printf("Server module id: %s\n", FLAGS_module_id.c_str());
  
  if (FLAGS_daemon) {
    printf("Run as daemon: %d\n", FLAGS_daemon);
  }
  if (FLAGS_memory_pool) {
    printf("Use memory pool: %d\n", FLAGS_daemon);
  }
  
  Server server;
  
  return 0;
}

server.h

// Copyright (c) 2011, D-Media Communication Technology Inc.
// All rights reserved.
//
//
// ---
// Author: Yichi Zhang <zyichi@gmail.com>
//
// File content description here
  
#include <google/gflags.h>
  
#include <stdio.h>
  
// Declare, defined in 'main.cc'.
DECLARE_int32(http_port);
DECLARE_int32(https_port);
  
class Server {
 public:
  Server() {
     
// XXX NOTE: Should add 'FLAGS_' prefix.
    printf("HTTP listen port: %d\n", FLAGS_http_port);
    printf("HTTPS listen port: %d\n", FLAGS_https_port);
  }
  virtual ~Server() {}
  
 private:
  ;
};

  

编译示例程序
[yichi@yichi gflags-sample]$ g++ -o gflags-sample main.cc -I $HOME/google-library/include -L $HOME/google-library/lib -lgflags
运行示例程序
带参数运行
[yichi@yichi gflags-sample]$ LD_LIBRARY_PATH=$HOME/google-library/lib:$LD_LIBRARY_PATH ./gflags-sample
Server module id:
Run as daemon: 1
HTTP listen port: 80
HTTPS listen port: 443
带参数运行,使用等号赋值
[yichi@yichi gflags-sample]$ LD_LIBRARY_PATH=$HOME/google-library/lib:$LD_LIBRARY_PATH ./gflags-sample -module_id="server_007" -daemon=true -http_port=8080 -https_port=4443
Server module id: server_007
Run as daemon: 1
HTTP listen port: 8080
HTTPS listen port: 4443
带参数运行,使用空格分割参数和值
[yichi@yichi gflags-sample]$ LD_LIBRARY_PATH=$HOME/google-library/lib:$LD_LIBRARY_PATH ./gflags-sample -module_id "server_007" -daemon true -http_port 8080 -https_port 4443
Server module id: server_007
Run as daemon: 1
HTTP listen port: 8080
HTTPS listen port: 4443
显示帮助
[yichi@yichi gflags-sample]$ LD_LIBRARY_PATH=$HOME/google-library/lib:$LD_LIBRARY_PATH ./gflags-sample –help
gflags-sample: Warning: SetUsageMessage() never called
Flags from main.cc:
-daemon (If started as daemon) type: bool default: true
-http_port (HTTP listen port) type: int32 default: 80
-https_port (HTTPS listen port) type: int32 default: 443
-memory_pool (If use memory pool) type: bool default: false
-module_id (Server module id) type: string default: ""
参考资料
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
!!!数据即代码:元驱动编程 我和我的小伙伴们都惊呆了
Google gflags使用说明
MySQL Proxy配置选项
最简单的教程:在Ubuntu操作系统里安装Docker
有关于*daemonnotrunning.startingitnowonport5037*A
「图」Chrome Canary新版:常规模式也可启用第三方cookies阻止新UI
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服