德才手游网:十大热门手游排行榜2023前十名,十大热门手机应用排行榜2023前十名,让你Get最新手游应用、分享你的热辣点评。
网站地图
你的位置: 首页 > 游戏资讯 > 操作系统

linux 中解析命令行参数(getopt_long用法)

  • 2023-04-12 05:29:36
  • 来源:其他
  • 在手机上看

    扫一扫立即进入手机端

  getopt_long支持长选项的命令行解析,使用man getopt_long,得到其声明如下:

  #include

  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);

  说明:函数中的argc和argv通常直接从main()到两个参数传递而来。optsting是选项参数组成的字符串,如果该字符串里任一字母后有冒号,那么这个选项就要求有参数。下一个参数是指向数组的指针,这个数组是option结构数组,option结构称为长选项表,其声明如下:

  struct option {

  const char *name;

  int has_arg;

  int *flag;

  int val;

  };

  结构中的元素解释如下:

  const char *name:选项名,前面没有短横线。譬如“help“、“verbose“之类。

  int has_arg:描述长选项是否有选项参数,如果有,是哪种类型的参数,其值见下表:

  符号常量 数值 含义

  no_argument 0 选项没有参数

  required_argument 1 选项需要参数

  optional_argument 2 选项参数是可选的

  int *flag:

  如果该指针为NULL,那么getopt_long返回val字段的值;

  如果该指针不为NULL,那么会使得它所指向的结构填入val字段的值,同时getopt_long返回0

  int val:

  如果flag是NULL,那么val通常是个字符常量,如果短选项和长选项一致,那么该字符就应该与optstring中出现的这个选项的参数相同;

  最后一个参数:longindex参数一般赋为NULL即可;如果没有设置为NULL,那么它就指向一个变量,这个变量会被赋值为寻找到的长选项在longopts中的索引值,这可以用于错误诊断。

  注:GNU提供的getopt-long()和getopt-long-only()函数,其中,后者的长选项字串是以一个短横线开始的,而非一对短横线。

linux 命令行约定:

  几乎所有的GNU/Linux程序都遵循一些命令行参数定义的约定。程序希望出现的参数可以分成两种:选项(options or flags)、其他类型的的参数。Options修饰了程序运行的方式,其他类型的参数则提供了输

  入(例如,输入文件的名称)。

  对于options类型参数可以有两种方式:

  1)短选项(short options):顾名思义,就是短小参数。它们通常包含一个连字号和一个字母(大写或小写字母)。例如:-s,-h等。

  2)长选项(long options):长选项,包含了两个连字号和一些大小写字母组成的单词。例如,--size,--help等。

  *注:一个程序通常会提供包括short options和long options两种参数形式的参数。

  对于其他类型参数的说明:

  这种类型的参数,通常跟随在options类型参数之后。例如,ls –s /功能为显示root目录的大小。’/ ’这个参数告诉ls要显示目录的路径。

  getopt_long()函数使用规则:

  (1)使用前准备两种数据结构

  字符指针型变量

  该数据结构包括了所有要定义的短选项,每一个选项都只用单个字母表示。如果该选项需要参数(如,需要文件路径等),则其后跟一个冒号。例如,三个短选项分别为‘-h’‘-o’‘-v’,其中-o需要参数,其他两个不需要参数。那么,我们可以将数据结构定义成如下形式:

  const char * const shor_options = “ho:v“ ;

  struct option 类型数组

  该数据结构中的每个元素对应了一个长选项,并且每个元素是由四个域组成。通常情况下,可以按以下规则使用。第一个元素,描述长选项的名称;第二个选项,代表该选项是否需要跟着参数,需要参数则为1,反之为0;第三个选项,可以赋为NULL;第四个选项,是该长选项对应的短选项名称。另外,数据结构的最后一个元素,要求所有域的内容均为0,即{NULL,0,NULL,0}。下面举例说明,还是按照短选项为‘-h’‘-o’

  ‘-v’的例子,该数据结构可以定义成如下形式:

  const struct option long_options = {

  { “help“, 0, NULL, ‘h’ },

  { “output“, 1, NULL, ‘o’ },

  { “verbose“, 0, NULL, ‘v’ },

  { NULL, 0, NULL, 0 }

  };

  (2)调用方法

  参照(1)准备的两个数据结构,则调用方式可为:

  getopt_long( argc, argv, short_options, long_options, NULL);

#p#副标题#e#

  (3)几种常见返回值

  (a)每次调用该函数,它都会分析一个选项,并且返回它的短选项,如果分析完毕,即已经没有选项了,则会返回-1。

  (b)如果getopt_long()在分析选项时,遇到一个没有定义过的选项,则返回值为‘?’,此时,程序员可以打印出所定义命令行的使用信息给用户。

  (c)当处理一个带参数的选项时,全局变量optarg会指向它的参数

  (d)当函数分析完所有参数时,全局变量optind(into argv)会指向第一个‘非选项’的位置实践小例子:

  view plaincopy to clipboardprint?

  #include

  #include

  char *l_opt_arg;

  char* const short_options = “nbl:“;

  struct option long_options[] = {

  { “name“, 0, NULL, 'n' },

  { “bf_name“, 0, NULL, 'b' },

  { “love“, 1, NULL, 'l' },

  { 0, 0, 0, 0},

  };

  int main(int argc, char *argv[])

  {

  int c;

  while((c = getopt_long (argc, argv, short_options, long_options, NULL)) != -1)

  {

  switch (c)

  {

  case 'n':

  printf(“My name is XL.\n“);

  break;

  case 'b':

  printf(“His name is ST.\n“);

  break;

  case 'l':

  l_opt_arg = optarg;

  printf(“Our love is %s!\n“, l_opt_arg);

  break;

  }

  }

  return 0;

  }

  #include

  #include

  char *l_opt_arg;

  char* const short_options = “nbl:“;

  struct option long_options[] = {

  { “name“, 0, NULL, 'n' },

  { “bf_name“, 0, NULL, 'b' },

  { “love“, 1, NULL, 'l' },

  { 0, 0, 0, 0},

  };

  int main(int argc, char *argv[])

  {

  int c;

  while((c = getopt_long (argc, argv, short_options, long_options, NULL)) != -1)

  {

  switch (c)

  {

  case 'n':

  printf(“My name is XL.\n“);

  break;

  case 'b':

  printf(“His name is ST.\n“);

  break;

  case 'l':

  l_opt_arg = optarg;

  printf(“Our love is %s!\n“, l_opt_arg);

游戏推荐

nba2k19参数设真实gs(2k19数值) csgo关闭下方参数(csgo关闭下面的fps显示) last命令(last命令参数) 《中世纪王朝》前期npc使用心得分享(中世纪王朝角色参数攻略) 《我的世界》命令方块指令大全(我的世界中命令方块的指令大全) openroadm(openroad命令) 《绝地求生》s686详细参数介绍(s686绝地求生) 《绝地求生》win94详细参数介绍(绝地求生win94狙击步枪) 《绝地求生》mp5k详细参数介绍大全(《绝地求生》mp5k详细参数介绍大全) csgo持枪m7参数(csgom7持枪视角) x4基石警察命令(x4基石怎么编队) csgo参数怎么调到中间(csgo怎么把调出来的参数往中间调) 2k19真实参数设定(2k19真实gs设置) csgo热身时间延长(csgo热身时间参数指令热身时间怎么改) csgo手臂晃动默认参数(csgo手臂晃动幅度指令) csgo左右手切换方法左右手命令是什么(csgo切换左右手一般都设置哪个键位) csgo向前走的时候怎么急停(csgo一直往前走得命令) csgo一键换枪指令(cs1.6一键换枪命令) csgo改库存是什么意思(csgo库存修改器保存参数) x4基石警察命令(x4基石教程任务) 《荒野大镖客2》全线上武器参数一览表(荒野大镖客2武器列表) 2k19真实参数设定(2k19怎么设置真实命中率) 《csgo》提供参数的一键切换指令在哪(《csgo》提供参数的一键切换指令在哪看) 《使命召唤》手游新手键位参数推荐表(使命召唤手游最佳键位) csgo上帝jame(csgo上帝模式命令) 《csgo》提供参数的一键切换指令是什么(csgo一键切换道具) csgo服务器设置参数(csgo服务器设置参数大全) nba2k19真实参数设置(2k19数值) gtfo控制台命令(gtfo控制台怎么用) dayz服务器指令(dayz服务器参数设置) csgo准星导入代码大全(csgo准星参数) csgo显示各种参数的指令(csgo显示各种参数的代码) Linux Linux中的Screen命令使用技巧详解 Linux解压缩命令 用netstat命令化身Windows7安全高手 Windows文件损坏?一条命令就搞定 参数 Linux服务器的参数配置优化技巧 只要1行命令 Cisco路由器安全配置必用的10条命令 vi编辑器命令 Linux下vi编辑器命令精华版 pscp命令linux文件上传与下载
更多

手机游戏排行榜