欢迎登陆真网站,您的到来是我们的荣幸。 登陆 注册 忘记密码? ☆设为首页 △加入收藏
欢迎加入真幸福QQ群
电脑知识: 基础知识 网络技术 操作系统 办公软件 电脑维修 电脑安全 windows7 windows8 windows10 服务器教程 平板电脑 视频播放教程 网络应用 互联网 工具软件 浏览器教程 QQ技巧 输入法教程 影视制作 YY教程 wps教程 word教程 Excel教程 PowerPoint
云南西双版纳特产小花糯玉米真空包装


Linux tar 压缩档案管理命令学习
linux的重定向命令应用及语法
Linux下获取用户主目录的方法分享
Linux中的Configure选项配置参数详解
iptables建立规则和链的基本方法
Premiere基础:门帘过渡效果的实现
Word 2007域的结果自动化更新方法
Linux实用工具的命令行详解
Linux压缩打包命令使用方法
Linux下如何用GCC编译动态库
linux解析命令行选项getopt_long用法解读
【 来源:网络 】【 点击:1 】 【 发布时间:2017_03_03 08:59:59 】

   linux解析命令行选项getopt_long用法

  在程序中难免需要使用命令行选项,可以选择自己解析命令行选项,但是有现成的,何必再造轮子。

  下面介绍使用getopt_long解析命令行选项。

  程序中主要使用:

  短选项 长选项 是否需要参数 备注

  -v --version 否 查询版本号

  -n --name 是(用户名) 指定使用者

  -d --debug 否 是否已测试

  1、函数出处

  复制代码

  代码如下:

  [cpp]

  #include //getopt_long()头文件位置

  int getopt_long (int ___argc, char *const *___argv,

  const char *__shortopts,

  const struct option *__longopts, int *__longind);

  int getopt_long_only (int ___argc, char *const *___argv,

  const char *__shortopts,

  const struct option *__longopts, int *__longind);

  2、参数介绍

  argc argv :直接从main函数传递而来

  shortopts:短选项字符串。如”n:v",这里需要指出的是,短选项字符串不需要‘-’,而且但选项需要传递参数时,在短选项后面加上“:”。

  longopts:struct option 数组,用于存放长选项参数。

  longind:用于返回长选项在longopts结构体数组中的索引值,用于调试。一般置为NULL

  下面介绍struct option

  复制代码

  代码如下:

  [cpp]

  struct option

  {

  const char *name;//长选项名

  int has_arg;//是否需要参数

  int *flag;

  int val;

  };

  name:长选项名字

  has_arg:是否需要参数。值有三种情况

  复制代码

  代码如下:

  [cpp]

  # define no_argument 0 //不需要参数

  # define required_argument 1 //必须指定参数

  # define optional_argument 2 //参数可选

  flag 和val

  flag和val相互依赖,主要分两种情况:

  (1)、flag为NULL,val值用于确定该长选项,所以需要为长选项指定唯一的val值。这里也为长选项和短选项建立了桥梁。

  (2)、flag不为NULL,则将val值存放到flag所指向的存储空间,用于标识该长选项出现过。

  3、返回值

  程序中使用短选项,则返回短选项字符(如‘n'),当需要参数是,则在返回之前将参数存入到optarg中。

  程序中使用长选项,返回值根据flag和val确定。当flag为NULL,则返回val值。所以根据val值做不同的处理,这也说明了val必须唯一。当val值等于短选项值,则可以使用短选项解析函数解析长选项;当flag不为NULL,则将val值存入flag所指向的存储空间,getopt_long返回0

  出现未定义的长选项或者短选项,getopt_long返回?

  解析完毕,getopt_long返回-1

  4、实例

  理论要与实际相结合

  复制代码

  代码如下:

  [cpp]

  #include

  #include

  #include //getopt_long()头文件位置

  int main(int argc, char** argv)

  {

  const char *optstring="n:v";

  int c,deb,index;

  struct option opts[]={{"username",required_argument,NULL,'n'},

  {"version",no_argument,NULL,'v'},

  {"debug",no_argument,&deb,1},

  {0,0,0,0}};

  while((c=getopt_long(argc,argv,optstring,opts,&index))!=-1)

  {

  switch(c)

  {

  case 'n'://-n 或者 --username 指定用户名

  printf("username is %sn",optarg);

  break;

  case 'v'://-v 或者--version,输出版本号

  printf("version is 0.0.1 n");

  break;

  case 0://flag不为NULL

  printf("debug is %dn",deb);

  break;

  case '?'://选项未定义

  printf("?n");

  break;

  default:

  printf("c is %dn",c);

  break;

  }

  }

  return 0;

  }

  运行截图:

linux解析命令行选项getopt_long用法解读   三联

  说明一下:getopt_long_only,这个函数功能与getopt_long相同,只是可以使用’-‘后面跟长选项名,如./main -username jackie

本网站由川南居提供技术支持,fkzxf版权所有 浙ICP备12031891号
淳安分站 淳安分站