getopt()函数用法

getopt() 函数原型:getopt() 函数,以及配合其使用的全局变量

#include <unistd.h>

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

extern char *optarg; //选项的参数指针

extern int optind;        //下一次调用getopt的时,从optind存储的位置处重新开始检查选项

extern int opterr;      //当 opterr= 0 时,getopt 不向 stderr 输出错误信息

extern int optopt;      //当命令行选项字符不包括在optstring 中或者选项缺少必要的参数时,该选项存储在optopt中,getopt返回'?’

getopt()函数的三个参数:argc,argv 即为 main()程序运行时的参数;optsring是需要匹配的选项。

该调用一次,返回一个选项,在命令行选项参数再也检查不到optstring 中包含的选项时,返回-1,同时 optind 储存第一个不包含选项的命令行参数的位置(注意这一点)。

字符串optstring可以下列元素:
1.单个字符,表示选项;
2.单个字符后接一个冒号 ‘ :’ ,表示该选项后面的是要接收的参数,参数紧跟在选项后,或者以空格隔开。该参数的指针赋给optarg。
3 单个字符后跟两个冒号 ‘ :: ’ ,表示该选项后可以接收参数,但参数必须紧跟在选项后面,如果是空格隔开的就不是它的参数。该参数的指针赋给optarg。

getopt()重新排列main()参数:
默认情况下getopt会重新排列main()参数的顺序,把所有不包含选项(没有‘ - ’)的参数都排到最后,以及没有作为选项参数的main()参数排到后面。

例子:main.c

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

int main(int argc,char **argv)
{
    printf("optind = %d \n",optind);
    printf("opterr = %d \n",opterr);	//打印optind,opterr的默认值
    opterr = 1;				//控制getopt()是否向标准错误输出错误信息
    printf("argc = %d \n",argc);	//下面显示main()的参数
    int i;
    for(i = 0; i < argc; ++i)
    {
        printf("argv[%d] = %s \n",i,argv[i]);
    }
    printf("*********************************\n");
    int ch;
    while((ch = getopt(argc,argv,"a:b::cde")) != -1)
    {
	printf("ch = %c \n",ch);
        switch(ch)
        {
        case 'a':
            printf("option a : '%s' \n",optarg);
            break;
        case 'b':
            printf("option b : '%s' \n",optarg);
            break;
        case 'c':
            printf("option c : '%s' \n",optarg);
            break;
        case 'd':
            printf("option d : '%s' \n",optarg);
            break;
        case 'e':
            printf("option e : '%s' \n",optarg);
            break;
        default:
            printf("other option : optopt = %c \n",optopt);
            break;
        }
	printf("optind = %d \n\n",optind,ch);
    }
    printf("*********************************\n");
    printf("optind = %d \n",optind);
    for(i = 0; i < argc; ++i)
    {
        printf("argv[%d] = %s \n",i,argv[i]);
    }
    return 0;
}
getopt()函数第三个参数optstring 是:“ a: b::cde ”,意思是main()的参数里面,选项 a 后面的是它的参数,可以是紧挨着a,也可以这个空格;选项 b后面可能有参数,有的话参数必须是紧挨着b的;cde后面没有参数;

假如输入为:~$ ./main -a 100 -b 200 -c -d300 -e linux

输出为:

optind= 1 , opterr= 1 , argc= 9

***************************

ch= a ,option a : '100' ,optind = 3

ch= b ,option b : '(null)' ,optind = 4

ch= c ,option c : '(null)' ,optind = 6

ch= d ,option d : '(null)' ,optind = 6

./main:invalid option -- '3'

ch= ? ,other option : optopt = 3 ,optind = 6

./main:invalid option -- '0'

ch= ? ,other option : optopt = 0 ,optind = 6

./main:invalid option -- '0'

ch= ? ,other option : optopt = 0 ,optind = 7

ch= e ,option e : '(null)' ,optind = 8

*********************************

optind= 7

argv[0]= ./main

argv[1]= -a

argv[2]= 100

argv[3]= -b

argv[4]= -c

argv[5]= -d300

argv[6]= -e

argv[7]= 200

argv[8]= linux


由该程序可以对getopt()函数有一个比较全面的了解。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值