函数 getopt() 的变量 optarg

The variable optarg of the function getopt()

我通读了 documentation for the function getopt(),但我觉得解释不清楚,尤其是关于变量 optarg。我找不到任何其他来源来明确和清楚地解释有关 optarg 的一般信息。我的问题如下:

文档中有如何使用 optarg 的示例,但我更感兴趣的是对变量本身的清晰详尽的解释。

man page 说,(强调我的

optstring is a string containing the legitimate option characters. If such a character is followed by a colon, the option requires an argument, so getopt() places a pointer to the following text in the same argv-element, or the text of the following argv-element, in optarg. Two colons mean an option takes an optional arg; if there is text in the current argv-element (i.e., in the same word as the option name itself, for example, "-oarg"), then it is returned in optarg, otherwise optarg is set to zero. [...]

下面给出的代码片段显示了用法。

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() 将 return 选项 optarg 将 return 为该选项提供的参数,如果有的话。

如果二进制是 运行 像 ./a.out -t 30,那么当 getopt() returns t 时,optarg 将持有一个指向包含 30 字符串 的指针(注意,不是 int