当前位置:网站首页 > 技术博客 > 正文

linux getopt函数



上午在看源码项目 webbench 时,刚开始就被一个似乎挺陌生函数 getopt_long() 给卡住了,说实话这函数没怎么见过,自然不知道这哥们是干什么的。于是乎百度了一番,原来是处理命令行选项参数的,的确,正规点的大型程序一般第一步就是处理命令行参数的,接着才是主干程序。在百度和 man 的帮助下,找到了具体使用方法和解释,二话不说赶紧学习一下,并总结出文档记录一下。

平时在写程序时常常需要对命令行参数进行处理,因为参数少,自己解析就可以搞定;如果命令行个数比较多时,如果按照顺序一个一个定义参数含义很容易造成混乱,而且如果程序只按顺序处理参数的话,一些“可选参数”的功能将很难实现,这个问题在 linux 中用 getopt 等函数可以优雅地解决。

先拿最简单的 getopt 函数开刀,getopt_long 只是前者的增强版,功能多点而已。

1、定义

2、描述

3、参数

4、返回

如果选项成功找到,返回选项字母;如果所有命令行选项都解析完毕,返回 -1;如果遇到选项字符不在 optstring 中,返回字符 '?';如果遇到丢失参数,那么返回值依赖于 optstring 中第一个字符,如果第一个字符是 ':' 则返回':',否则返回'?'并提示出错误信息。

5、下边重点举例说明optstring的格式意义:

上面这个 optstring 在传入之后,getopt 函数将依次检查命令行是否指定了 -a, -b, -c(这需要多次调用 getopt 函数,直到其返回-1),当检查到上面某一个参数被指定时,函数会返回被指定的参数名称(即该字母)

以上描述的并不生动,下边结合实例来理解:

6、实例:

编译上述程序并执行结果:

输入选项及参数正确的情况

或者这样的选项格式(注意区别):

选项a是可选参数,这里不带参数也是正确的

输入选项参数错误的情况

导致解析错误,第一个 optarg = null,实际输入参数 100,由于格式不正确造成的(可选参数格式固定)

参数丢失,也会导致错误,c选项是必须有参数的,不加参数提示错误如下:

这种情况,optstring 中第一个字母不是':',如果在 optstring 中第一个字母加':',则最后丢失参数的那个选项 opt 返回的是':',不是'?',并且没有提示错误信息,这里不再列出。

命令行选项未定义,-e选项未在optstring中定义,会报错:

到这里应该已经把getopt函数的功能讲解清楚了吧,下边来说说 getopt_long 函数,getopt_long 函数包含了 getopt 函数的功能,并且还可以指定"长参数"(或者说长选项),与 getopt 函数对比,getopt_long 比其多了两个参数:

1、定义

2、描述

3、参数

4、返回

6、参数说明:

接着看一下实例操作会更加深刻地理解:

7、实例:

编译上述程序并执行结果:

正确输入长选项的情况

或者这种方式:

可选选项可以不给参数

输入长选项错误的情况

这时,虽然没有报错,但是第二项中 optarg 参数没有正确解析出来(格式应该是 —optarg=200)

必须指定参数的选项,如果不给参数,同样解析错误如下:

长选项的举例说明暂且就这么多吧,其它如选项错误、缺参数、格式不正确的情况自己再试验一下。

getopt_long_only 函数与 getopt_long 函数使用相同的参数表,在功能上基本一致,只是 getopt_long 只将 --name 当作长参数,但 getopt_long_only 会将 --name 和 -name 两种选项都当作长参数来匹配。getopt_long_only 如果选项 -name 不能在 longopts 中匹配,但能匹配一个短选项,它就会解析为短选项。

版权声明


相关文章:

  • 蒙特卡罗搜索树的步骤2024-11-16 16:00:59
  • 极大似然估计概念2024-11-16 16:00:59
  • yum查看依赖包2024-11-16 16:00:59
  • 计算机就业前景怎么样2024-11-16 16:00:59
  • opcache原理2024-11-16 16:00:59
  • 灰度发布技术2024-11-16 16:00:59
  • c语言中左移运算符怎么用2024-11-16 16:00:59
  • 软件安全测试方法2024-11-16 16:00:59
  • php pathinfo函数2024-11-16 16:00:59
  • 美团外卖搜索引擎2024-11-16 16:00:59