getopt如何用

1 getopt()用法

       #include <unistd.h>
       int getopt(int argc, char * const argv[],
                  const char *optstring);
       extern char *optarg;
       extern int optind, opterr, optopt;

这个函数是用来解析命令行的选项的。但是,只能解析短选项,什么是短选项?就是-d这种只有一个-的,而且是只有一个字母的。

首先要注意几个外部变量optarg,optind,opterr。

opterr设置为0时,当解析命令出错也不向标准输出打印任何信息。

optarg是当前解析到的选项的后面带的参数,特别注意必须使用空格来间隔掉选项和后面的值。-d 100,切记只用空格,不要用=。而且getopt只能够解析那些在optstring参数中后面带有了:的选项,如"abcd:"。

optind 是指向char *argv[]数组中的当前被处理的参数的下一个位置的指标。可以看作是逾尾指针的性质。

参数详解:optstring这个参数就是用来配置选项参数的。"abcd:",冒号就表示可以带参数。

返回值:这个函数直接返回当前解析的短选项的名字,如命令行中为-d,那么这里返回字符d。如果当前所有参数全部解析完,那么这次调用返回-1。一般getopt()函数调用就放在while的判断条件中,直到返回值为-1时为止。

2 getopt_long()函数

       #include <getopt.h>

       int getopt_long(int argc, char * const argv[],
                  const char *optstring,
                  const struct option *longopts, int *longindex);

       int getopt_long_only(int argc, char * const argv[],
                  const char *optstring,
                  const struct option *longopts, int *longindex);

getopt_long()函数可以解析带有长选项参数,如--prefix=/boot/等等,但是如果要禁止使用短参数,则必须将optstring参数设置为空字符串“”。

参数详解:

longopts 指向struct option结构体数组的第一个元素的指针。注意这个数组的最后一个元素必须是用全0来填充{0,0,0,0}。这个结构体定义在<getopt.h>中。下面看下这个结构体:

        struct option {
               const char *name;   //这个长选项的名字
               int         has_arg; // 这个长选项可携带的参数的情况,no_argument (or 0  不带参数),required_argument (or 1  需要参数),optional_argument (or 2  可选参数,可带可不带)
               int        *flag;  // 这个成员比较复杂。1 如果设为NULL,那么getopt_long()函数直接返回val的值
               int         val;   //                2 如果不为NULL,那么getopt_long()函数直接返回0,同时,name表示的选项有的话就将val的值赋值给flag指针指向的int变量,name选项没有的话,flag指向的变量维持原状。
           };

3 getopt_long_only()函数与getopt_long的区别

getopt_long_only函数,它与getopt_long函数使用相同的参数表,在功能上基本一致。

    getopt_long只将--name当作长参数,那么对于-name直接当成-n -a -m -e 去解析。

    getopt_long_only会将--name和-name两种选项都当作长参数来匹配,那么对于-name先当做--name来处理,不能匹配时,才去解析为-n -a -m -e。






转载于:https://my.oschina.net/u/1024767/blog/608210

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值