命令行处理函数getopt的使用方法

        日常开发中,会经常对命令行参数进行处理,当参数比较少的时候,可以手动处理,但是当参数过多的时候就要使用getopt来处理了。

int getopt(int argc, char * const argv[],
           const char *optstring);
extern char *optarg;
extern int optind, opterr, optopt;

getopt() 所设置的全局变量包括:

        optarg——指向当前选项参数(如果有)的指针

        optind——再次调用 getopt() 时的下一个argv指针的索引,即表示的是下一个将被处理到的参数在argv中的下标值。

        optopt——最后一个未知选项。

        opterr——如果指定此值为0,getopt、getopt_long、getopt_long_only遇到错误将不会输出错误信息到标准输出流。

        从最简单的getopt讲起,getopt函数的前两个参数,就是main函数的argc和argv,这两者直接传入即可,要考虑的就只剩下第三个参数。

        optstring字符串的意义如下:比如:getopt(argc, argv, "ab:c:de::");

        1.单个字符,表示选项(如下例中的abcde各为一个选项)。比如:./a.out -a

        2.单个字符后接一个冒号:表示该选项后必须跟一个参数。参数紧跟在选项后或者以空格隔开。该参数的指针赋给optarg(如下例中的b:c:)。比如:./a.out -b zhang

        3 单个字符后跟两个冒号,表示该选项后可以跟一个参数,也可以不跟。如果跟一个参数,参数必须紧跟在选项后不能以空格隔开。该参数的指针赋给optarg。(如上例中的e::,如果没有跟参数,则optarg = NULL)。./a.out -ezhang

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

        -mnbn相当于-m -n -b n

#include <stdio.h>
#include <unistd.h>
#include <getopt.h>

int getopt(int argc, char * const argv[],
           const char *optstring);
extern char *optarg;
extern int optind, opterr, optopt;

int main(int argc, char *argv[])
{
    int opt;
    char *optstring = "ab:c::d:";
//    opterr = 0;

    while ((opt = getopt(argc, argv, optstring)) != -1)
    {
        printf("opt = %c\n", opt);
        printf("optarg = %s\n", optarg);
        printf("optind = %d\n", optind);
        printf("argv[optind - 1] = %s\n",  argv[optind - 1]);
        printf("optopt = %c\n", optopt);
    }

    return 0;
}

程序运行结果为:

下一篇:命令行处理函数getopt_long的使用方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值