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

张雨微888

张雨微888

2016-03-31 15:25

想要天天向上,就要懂得享受学习。图老师为大家推荐linux解析命令行选项getopt_long用法解读,精彩的内容需要你们用心的阅读。还在等什么快点来看看吧!

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

   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中。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/fuwuqi/)

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

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

  解析完毕,getopt_long返回-1

  4、实例

  理论要与实际相结合

  复制代码

  代码如下:

  [cpp]

  #include

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/fuwuqi/)

  #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

展开更多 50%)
分享

猜你喜欢

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

服务器
linux解析命令行选项getopt_long用法解读

启动命令行选项

编程语言 网络编程
启动命令行选项

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Linux命令行Find小技巧

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
Linux命令行Find小技巧

Linux命令行之逗趣的图文

服务器
Linux命令行之逗趣的图文

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Linux命令行里的“瑞士军刀”

服务器
Linux命令行里的“瑞士军刀”

Linux命令行中网速测试方法详解

电脑入门
Linux命令行中网速测试方法详解

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

苹果iPhone6S怎么关闭锁屏声

苹果iPhone6S怎么关闭锁屏声

苹果iPhone6s处理器版本如何鉴别

苹果iPhone6s处理器版本如何鉴别
下拉加载更多内容 ↓