getopt ()

本文详细介绍了getopt函数在命令行解析中的使用方法,包括optstring参数的作用、optarg变量的使用、optind和opterr的作用以及它们在不同场景下的表现。通过实例展示了如何正确处理命令行参数,以及在遇到无效选项或参数时的错误处理机制。
#include <unistd.h>

int ret = int getopt(int argc, char * argv[], const char * optstring);

extern char *optarg;

extern int optind, opterr, optopt;

 

例子

getopt(argc, argv, "nt:")


程序执行时

./a.out -n
合法
./a.out -s
不合法./a.out: invalid option -- s
./a.out -t
不合法./a.out: option requires an argument -- t
./a.out -t 2012
合法

 

1, optstring

nt是选项, 也就是-n -t, t:表示t后面需要加参数。因为没有s,所以如果命令中出现例如-s会提示invalid option.   如果两个冒号,比如t::表示t后面可以接参数也可以不接参数。如果出现了W; 即W接着一个分号,则命令行中-W foo会被当成是--foo

 

2, optarg

选项t被要求接一个参数,则optarg 存放这个参数,无论参数和t之间是否有空格。比如-t 2012 和 -t2012, optarg中都会有2012。但是需要注意的是如果需要数字2012需要用atoi(optarg)转换成int型

 

3, optind

第一种情况,返回值不是-1。 optind的值是下一个字符串数组的index,这样做的目的是当再调用一次函数时,他将直接检查下一个argv。因为字符串数组的index是从0开始的,所以上面所有例子中都是2。值得注意的是下面的例子执行结果是不同的

./a.out -t 2012 -s
合法,optarg是2012, optind是2
./a.out -s -t 2012
不合法,提示./a.out: invalid option -- s, optind是2, optarg是空、
原因是函数执行的时候先从第0个argv开始检查。碰到不合法的就停止了。

第二种情况,返回值是-1。 optind是参数列表中第一个不是选项的index

 

4, 返回值ret

当(第一个)参数合法,ret是参数的ascii码

当(第一个)参数不合法,ret是符号?的ascii码,即63

当没有更多的参数可供检查时(while中),返回-1。

 

5, optopt

当(第一个)参数不合法,optopt是不合法参数的ascii码

 

6, opterr

不合法时,如果opterr此时又是1,将打印上述的错误如invalid option 和option requires an argument。如果不想打印错误,在函数调用之前,opterr = 0. 默认为1

 

除非程序只期待一个选项,一般用while结构,因为函数只执行一次参数检查。要想把所有argv都检查一遍,用

 while ((opt = getopt(argc, argv, "nt:")) != -1) {

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值