函数说明
NAME
getopt, getopt_long, getopt_long_only, optarg, optind, opterr, optopt - Parse command-line options
SYNOPSIS
#include <unistd.h>
int getopt(int argc, char * const argv[],
const char *optstring);
extern char *optarg;
extern int optind, opterr, optopt;
#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);
Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
getopt(): _POSIX_C_SOURCE >= 2 || _XOPEN_SOURCE
getopt_long(), getopt_long_only(): _GNU_SOURCE
假如函数的第三个参数为"a:b:cd::e",即getopt(argc, argv, "ab:c:de::")
选项:分带参和不带参选项 ,执行命令时,选项可有可无,如-b,-c等等。
- 选项后带一个冒号就表示这个选项后面必须带有参数,不带参数报错。
- 选项后带两个冒号就表示该选项后可以跟一个参数,也可以不跟。如果跟一个参数,参数必须紧跟在选项后不能以空格隔开。该参数的指针赋给optarg。
外部全局变量说明
- char *optarg:当前选项的参数(如果有的话)。
- int optind:argv的当前索引值,初始值为1
- int opterr:opterr非零表示产生的错误要输出到stderr上,初值为1。参数紧跟在选项后或者以空格隔开。该参数的指针赋给optarg。
- int optopt:当发现无效选项时,getopt()函数返回’?‘字符,或返回’:'字符,并且optopt包含了所发现的无效选项字符。
示例代码
while ((c = getopt(argc, argv, "S::N:V:P:FB:c:i:r:Ru:s:kt:m:hedp:fav")) != -1) {
switch (c) {
case 'S':
allow_slaac_only = (optarg) ? atoi(optarg) : -1;
break;
case 'N':
...
default:
help = true;
break;
}
}
参考
https://blog.youkuaiyun.com/qq_22863733/article/details/80173793
https://blog.youkuaiyun.com/a1187006940/article/details/51365242

本文深入解析getopt函数的使用方法,包括短选项、长选项、带参数和不带参数选项的处理方式。同时,介绍了外部全局变量的作用及示例代码,帮助读者掌握命令行参数解析技巧。
1421

被折叠的 条评论
为什么被折叠?



