WEB开发网
开发学院操作系统Linux/Unix 使用 getopt() 进行命令行处理 阅读

使用 getopt() 进行命令行处理

 2008-11-13 08:31:44 来源:WEB开发网   
核心提示: 这已经变得更为灵活了,因为各个选项现在可以具有可选参数了,使用 getopt() 进行命令行处理(7),更重要的是,仅需要进行很少的工作,--no-index 等同于 -I),通过在选项结构中包含其短选项等效项,就可以方便地放入现有代码中,让我们看看如何使用 getopt_long() 来

这已经变得更为灵活了,因为各个选项现在可以具有可选参数了。更重要的是,仅需要进行很少的工作,就可以方便地放入现有代码中。

让我们看看如何使用 getopt_long() 来对示例程序进行更改(getopt_long_demo 项目可从下载部分获得)。

使用 getopt_long()

由于 getopt_long_demo 几乎与刚刚讨论的 getopt_demo 代码一样,因此我将仅对更改的代码进行说明。由于现在已经有了更大的灵活性,因此还将添加对 --randomize 选项(没有对应的短选项)的支持。

getopt_long() 函数在 getopt.h 头文件(而非 unistd.h)中,因此将需要将该头文件包含进来(请参见清单 11)。我还包含了 string.h,因为将稍后使用 strcmp() 来帮助确定处理的是哪个长参数。

清单 11. 其他头文件

#include <getopt.h>
#include <string.h>

您已经为 --randomize 选项在 globalArgs 中添加了一个标志(请参见清单 12),并创建了 longOpts 数组来存储关于此程序支持的长选项的信息。除了 --randomize 外,所有的参数都与现有短选项对应(例如,--no-index 等同于 -I)。通过在选项结构中包含其短选项等效项,可以在不向程序添加任何其他代码的情况下处理等效的长选项。

清单 12. 扩展后的参数

struct globalArgs_t {
  int noIndex;        /* -I option */
  char *langCode;       /* -l option */
  const char *outFileName;  /* -o option */
  FILE *outFile;
  int verbosity;       /* -v option */
  char **inputFiles;     /* input files */
  int numInputFiles;     /* # of input files */
  int randomized;       /* --randomize option */
} globalArgs;
static const char *optString = "Il:o:vh?";
static const struct option longOpts[] = {
  { "no-index", no_argument, NULL, 'I' },
  { "language", required_argument, NULL, 'l' },
  { "output", required_argument, NULL, 'o' },
  { "verbose", no_argument, NULL, 'v' },
  { "randomize", no_argument, NULL, 0 },
  { "help", no_argument, NULL, 'h' },
  { NULL, no_argument, NULL, 0 }
};

上一页  2 3 4 5 6 7 8  下一页

Tags:使用 getopt 进行

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接