我已阅读documentation for getopt()
,但我没有找到optarg
的解释清楚。
我找不到任何明确且清楚地解释有关optarg
的一般信息的其他来源。
如果有人能澄清并详细说明有关optarg
的一般信息,我将不胜感激。
我想知道:
optarg
是什么。optarg
如何获得其价值。optarg
。该文档包含如何使用optarg
的示例。我对变量本身的清晰而精细的解释更感兴趣。
答案 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
,请注意)。