关闭

Linux命令行参数编程

发表于:2010-6-03 10:13

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

  GNU/Linux的命令行选项有两种类型:短选项和长选项,前者以 '-' 作为前导符,后者以 '--' 作为前导符。比如有一个命令:

$ myprog -a vv --add -b --file a.txt b.txt - -- -e c.txt

  在GNU/Linux系统,对这种情况的一种合理解释是:

  a是短选项,带一个参数vv;
  add是长选项,无参数;
  b是短选项,无参数;
  file是长选项,带一个参数a.txt;
  b.txt是参数;
  -是参数,通常表示标准输入,stdin;
  --是一个指示符,表明停止扫描参数,其后所有部分都是参数,而不是选项;
  -e是参数;
  c.txt是参数

  为了简化程序设计,有几个库函数可以优雅地分析命令行参数,原型如下:

#include <unistd.h>
int getopt(int argc, char * const argv[],
const char *optstring);
extern char *optarg;
extern int optind, opterr, optopt;
#define _GNU_SOURCE
#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);

  我们先看看用于分析短参数的getopt函数。参数含义如下:

  argc, argv是从main函数获取的参数,原样传给getopt;

  optstring指示如何分析参数。

  关于optstring,还有几点说明:

  如果选项带参数,该选项后接冒号,比如上例中optstring为"a:b",指示a带参数,b没有参数;

  如果选项带可选参数,该选项后接两个冒号,比如"a::b",表明a可能有参数,也可能没有;

  如果optstring的开头字符为':',表明如果指明选项带参数,而实际命令行没有参数时,getopt返回':'而不是'?'(默认情况下返回'?',和无法识别的参数返回一样);

  如果optstring的开头字符为'+',表明一但遇到一个无选项参数,马上停止扫描,随后的部分当作参数来解释;

  如果optstring的开头字符为'-',表明如果遇到无选项参数,则把它当作选项1(不是字符'1')的参数。

  该函数每解析完一个选项,就返回该选项字符。

  如果选项带参数,参数保存在optarg中。如果选项带可选参数,而实际无参数时,optarg为NULL。

31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号