getopt()的变量optarg

时间:2016-10-26 05:05:08

标签: c getopt

我已阅读documentation for getopt(),但我没有找到optarg的解释清楚。

我找不到任何明确且清楚地解释有关optarg的一般信息的其他来源。

如果有人能澄清并详细说明有关optarg的一般信息,我将不胜感激。

我想知道:

  • optarg是什么。
  • optarg如何获得其价值。
  • 文档提到了有关冒号更改optarg
  • 值的内容

该文档包含如何使用optarg的示例。我对变量本身的清晰而精细的解释更感兴趣。

1 个答案:

答案 0 :(得分:2)

man page说,(强调我的

  

optstring 是包含合法选项字符的字符串。如果这样的字符后跟冒号,则该选项需要一个参数,因此getopt()指向同一argv元素中的以下文本的指针,或以下argv元素的文本, optarg 即可。两个冒号意味着一个选项需要一个可选的arg;如果当前argv-element中有文本(即,与选项名称本身相同的单词,例如“-oarg”),则在optarg中返回,否则optarg设置为零。 [...]

以下给定的代码段显示了用法。

while ((opt = getopt(argc, argv, "nt:")) != -1) {
    switch (opt) {
    case 'n':
        flags = 1;
        break;
    case 't':
        nsecs = atoi(optarg);
        tfnd = 1;
        break;
    default: /* '?' */
        fprintf(stderr, "Usage: %s [-t nsecs] [-n] name\n",
                argv[0]);
        exit(EXIT_FAILURE);
    }
}

详细说明,通过查看语法"nt:",我们可以理解选项n不需要任何参数,但选项t将具有以下参数。因此,当找到选项t时,相应的参数将存储到optarg中,并可通过访问optarg来检索。

因此,基本上,getopt()将返回选项optarg将返回该选项的提供的参数,如果有的话。

如果二进制文件的运行方式与./a.out -t 30类似,那么当getopt()返回t时,optarg将持有指向字符串的指针包含30(不是int,请注意)。