getopt 与 getopt_long 函数用法
编写运行程序时,通常都会传入某些参数,例如unix中大部分的命令,通常都可以加上可选参数,如cp -r source 颊俄岿髭destination。程序的参数通过argv传入,一种比较粗暴的方式时直接解析argv参数,但系统中提供的getopt和getopt_long函数能更好的帮助我们执行解析操作。getopt和getopt_long函数的作用就是解析命令行参数。
工具/原料
gcc编译器
notepad++等编辑器
getopt函数
1、函数原型如图所示
2、除了函数原蕞瞀洒疸型外,还有几个全局变量用来配合获取具体参数选项的值,或标识错误。 extern char *optarg; //选项的参数指针 extern int optind; //下一关骇脘骱次调用getopt的时,从optind存储的位置处重新开始检查选项。 extern int opterr; //当opterr=0时,getopt不向stderr输出错误信息。 extern int optopt; //当命令行选项字符不包括在optstring中或者选项缺少必要的参数时,该选项存储在optopt中,getopt返回'?'
3、我们以下面的例子以及运行情况来作为讲解,例子如下:
4、按照不同的输入参数结果,验证解析结果。
getopt_long函数
1、在linux程序中,我们还经常看见使用'--'标识输入参数的,这种就需要使用getopt_long函数来解析。getopt_long是getopt的升级版,支持长选项命令解析。
2、函数原型如下图中所示
3、参数longopts结构定义如下:struct option { 罕铞泱殳const char *name; // name表示长选项参数名称 int has_arg; // has_arg有3个值,no_argument(或者0),表示该参数后面不跟参数值 // required_argument(或者1),表示该参数后面一定要有参数值 // optional_argument(或者2),表示该参数后面可选参数值 int *flag; // int val; // flag与val用来决定函数返回值。如果flag是null,则函数会返回val值;如果flag不是null,则将val值赋予flag所指向的内存,并且返回值设置为0};
4、我们也以一个的例子以及运行情况来作为讲解,例子如下:
5、编译后执行,输入参数结果,验证解析结果