Getopt
1 Synopsis
getopt 是一个用于解析命令行参数的 C 语言函数,getopt_long 是 getopt 的增强版本,它支持长选项
2 Description
getopt()
| C | |
|---|---|
1 2 3 4 5 6 7 | |
argc:对应main()的argcargv:对应main()的argvoptstring:定义了合法的选项及其格式- 单个字符表示简单选项(如
a对应-a) - 字符后接冒号
:表示该选项需要参数(如f:对应-f file) - 字符后接两个冒号
::表示该选项的参数是可选的(如f::对应-f[file])
全局参数解析:
optarg:用于存储当前选项的参数
如果没有参数,则
optarg被设为 0
-
optind:下一个要处理的参数索引 -
opterr:是否显示错误信息
默认情况下,
getopt()遇到无效选项或未知选项默认会打印错误,未知/无效选项存放在optopt,并返回?;当
opterr被设为 0,那么getopt()遇到无效选项或未知选项不会打印错误信息,可通过检查函数返回值是否为
'?'来判断是否出错
optopt:存放无法识别的选项字符
返回值:
| 返回值 | 含义 | 条件 |
|---|---|---|
| 选项字符 | 成功识别了一个选项 | 选项在 optstring 中定义 |
-1 |
选项处理完毕 | 已到达参数列表末尾或遇到非选项参数 |
'?' |
未知选项 | 选项不在 optstring 中定义 |
'?' |
缺少必需参数 | 选项需要参数但未提供(当 optstring 不以 ':' 开头时) |
':' |
缺少必需参数 | 选项需要参数但未提供(当 optstring 以 ':' 开头时) |
getopt_long()
| C | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 | |
argc:对应main()的argcargv:对应main()的argvoptstring:定义了合法的选项及其格式- 单个字符表示简单选项(如
a对应-a) - 字符后接冒号
:表示该选项需要参数(如f:对应-f file) - 字符后接两个冒号
::表示该选项的参数是可选的(如f::对应-f[file]) longopts:指向struct option数组的指针,定义了长选项的格式longindex:用于存储当前匹配的长选项在longopts数组中的索引,如果不需要此信息,可以将其设置为NULL
struct option 解析:
| C | |
|---|---|
1 2 3 4 5 6 | |
name:长选项的名称has_arg:参数要求no_argument或 0:选项不带参数(如--help)required_argument或 1:选项需要参数(如--output file.txt)optional_argument或 2:选项参数可选(如--prefix[=path])flag:定义返回值方式flag == NULL:getopt_long()返回val中定义的值flag != NULL:getopt_long()返回 0,并将flag指向valval:定义返回值
返回值:
| 返回值 | 含义 | 条件 |
|---|---|---|
| 短选项字符 | 成功识别了一个短选项 | 选项在 optstring 中定义 |
val |
成功识别了一个长选项,且 flag 为 NULL |
选项在 longopts 数组中定义 |
| 0 | 成功识别了一个长选项,且 flag 不为 NULL |
选项在 longopts 数组中定义 |
-1 |
选项处理完毕 | 已到达参数列表末尾或遇到非选项参数 |
'?' |
未知选项 | 选项不在 optstring 或 longopts 中定义 |
'?' |
缺少必需参数 | 选项需要参数但未提供(当 optstring 不以 ':' 开头时) |
':' |
缺少必需参数 | 选项需要参数但未提供(当 optstring 以 ':' 开头时) |
3 Example
getopt()
| C | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
getopt_long()
| C | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | |