getopt--参数选项处理

在写一些可执行程序时,常常会传递一些参数。getopt函数就是专门用来处理选项参数的。

#include <unistd.h>

extern char *optarg;
extern int optind, opterr, optopt;

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

argc和argv就是命令行传入的参数。

optstring是支持的选项列表。具体规则如下:

  • 单一字符(如:"abc")。表示支持的选项,后面无参数。
  • 字符后面跟上冒号(如:"a:b:c:")。表示后面必须跟一个参数,可以紧跟在后面,也可以以空格隔开。例如传参"-a 10 -b20"。此时变量optarg就指向参数位置。
  • 字符后面跟两个冒号(如:"a::")。表示后面必须跟一个参数,且不能以空格隔开。如:"-a20"。此时变量optarg就指向参数位置。

optarg、optind、opterr、optopt:

  • optarg:当选项后面跟参数时,此指针指向参数。
  • optind:这个变量表示当前要处理的参数在argv参数列表中的需要,初始值是1。总之argv[optind]始终是指向下一次要解析的参数序号。
  • opterr:表示错误值。
  • optopt:指向当前选项。比如-a,则optopt就是97.

当getopt解析到一个并不在optstring中的选项时,或者一个必须跟参数的选项后面没有参数时,其返回值就是'?'(0x3f)。optopt指向当前的选项。

了解了上面的接口和相关参数,就可以通过循环调用getopt来解析一长串的参数。

 

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

extern int optind, opterr, optopt;
extern char* optarg;


void show_help(char* exe)
{
        printf("Usage: %s -<w/r> [info]\r\n");
}

void main(int argc, char* argv[])
{
        int     ch; 
    
        printf("optind = %d.\r\n", optind);
        while ((ch = getopt(argc, argv, "w:rh::")) != -1) {
                printf("optind = %d.\r\n", optind);
                switch (ch) {
                        case 'w':
                                printf("get w. optarg = %s. optind = %d\r\n", optarg, optind);
                                break;
                        case 'r':
                                printf("get r. optarg = %s\r\n", optarg);
                                break;
                        case 'h':
                                printf("get h.\r\n");
                                break;
                        default:
                                printf("default ch = %d. optopt = %d\r\n", ch, optopt);
                                break;
                }    
        } 
   

        printf("end.\r\n");    

}

运用好optind、optarg变量,再加上一些具体应用所需的策略,即可完成对命令行参数的解析。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值