getopt 与 getopt_long 函数用法

2025-04-21 17:38:57

编写运行程序时,通常都会传入某些参数,例如unix中大部分的命令,通常都可以加上可选参数,如cp -r source 颊俄岿髭destination。程序的参数通过argv传入,一种比较粗暴的方式时直接解析argv参数,但系统中提供的getopt和getopt_long函数能更好的帮助我们执行解析操作。getopt和getopt_long函数的作用就是解析命令行参数。

工具/原料

gcc编译器

notepad++等编辑器

getopt函数

1、函数原型如图所示

getopt 与 getopt_long 函数用法

2、除了函数原蕞瞀洒疸型外,还有几个全局变量用来配合获取具体参数选项的值,或标识错误。 extern char *optarg; //选项的参数指针 extern int optind; //下一关骇脘骱次调用getopt的时,从optind存储的位置处重新开始检查选项。 extern int opterr; //当opterr=0时,getopt不向stderr输出错误信息。 extern int optopt; //当命令行选项字符不包括在optstring中或者选项缺少必要的参数时,该选项存储在optopt中,getopt返回'?'

3、我们以下面的例子以及运行情况来作为讲解,例子如下:

getopt 与 getopt_long 函数用法

4、按照不同的输入参数结果,验证解析结果。

getopt 与 getopt_long 函数用法
getopt 与 getopt_long 函数用法
getopt 与 getopt_long 函数用法
getopt 与 getopt_long 函数用法
getopt 与 getopt_long 函数用法

getopt_long函数

1、在linux程序中,我们还经常看见使用'--'标识输入参数的,这种就需要使用getopt_long函数来解析。getopt_long是getopt的升级版,支持长选项命令解析。

2、函数原型如下图中所示

getopt 与 getopt_long 函数用法

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、我们也以一个的例子以及运行情况来作为讲解,例子如下:

getopt 与 getopt_long 函数用法

5、编译后执行,输入参数结果,验证解析结果

getopt 与 getopt_long 函数用法
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢