初步理解getopt函数

简介:

getopt函数为C语言程序中提供命令行开关的标准程序接口。实际作用是解析命令行参数。

#include<unistd.h>

int getopt(int argc,char *const argv[],const char *opstring);
extern char *optarg;
extern int optind,opterr,optopt;

getopt函数将传递给程序mian()函数的argc,argv作为参数,同时接受一个指定指定符字符串optstring。函数getopt()认为optstring中,以‘-’开头的字符为命令行参数选项,有的参数选项后面可以跟参数值,optstring中的格式规范如下:
1) 单个字符,表示选项,
2) 单个字符后接一个冒号”:”,表示该选项后必须跟一个参数值。参数紧跟在选项后或者以空格隔开。该参数的指针赋给optarg。
3) 单个字符后跟两个冒号”::”,表示该选项后必须跟一个参数。参数必须紧跟在选项后不能以空格隔开。该参数的指针赋给optarg。(这个特性是GNU的扩张)。

getopt(argc,argv,"ab:cd");

上面例子允许几个选项-a -b -c -d 其中-b 后面需要跟一个参数 

那么解析命令行参数通常通过循环来一次得到每个选项。

如果选项中有这个关联值,那么就是上面提到的外部变量optarg来指向这个值。

如果选项处理完毕那么函数getopt返回-1,特殊参数“--”将使getopt停止扫描选项。

如果遇到无法识别的选项,getopt返回一个问号(?),并保存到外部变量optopt中。

如果一个选项要求有一个关联值(例如上面例子的-b),但是用户没有提供这个值,getopt通常返回一个问号(?),如果我们将字符串第一个字符设置为冒号(:),那么用户将在用户没提供值的情况下返回冒号(:),而不是问号(?)。

现在我们已知的变量有optarg(指向外部变量),optopt保存无法识别的参数项,还有optind,为下一个待处理参数的所以。getopt用他来记录自己的进度。此外还有些getopt版本会在遇到未知选项时打印出错信息。如果opterr变量是非零值,getopt就会向stderr打印一条出错信息。

目录
相关文章
|
6月前
|
存储 编译器 项目管理
深入探索 CMake:揭秘非常规特殊变量${ARGN},${ARGV},${ARGV0}, ${ARGV1}等等
深入探索 CMake:揭秘非常规特殊变量${ARGN},${ARGV},${ARGV0}, ${ARGV1}等等
145 2
|
物联网 Linux C语言
Execl 函数|学习笔记
快速学习 Execl 函数
Execl 函数|学习笔记
|
Unix Shell
shell编程——getopt
写shell脚本的时候,通过while、case、shift来设计脚本的命令行选项是一件比较麻烦的事,因为Unix命令行的选项和参数自由度很高,支持短选项和长选项,参数可能是可选的,选项顺序可能是无所谓的,等等。
2786 0
|
Shell C语言