getopt()用来解析命令行参数

getopt(int argc,char **argv,const char *shotopts)

第一个参数为命令参数的个数;第二个参数存命令参数;第三个参数为所有可能的参数字符串optstring,仅支持短参数

参数ab:c::d::代表。/getopt -a -b host -chello -d world(world不是参数值,因为-d后面有空格)

getopt()成功后返回第一个选项a,并设置全局变量

optarg:指向当前参数的指针,如果调用函数的人为某个参数赋值,则它指向这个值(eg:b的值host)

optind:再次调用getopt()时的下一个argv指针的索引,下一个参数在列表中得标号

optopt:存储不可知或错误选项

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

int main(int argc,char **argv)
{
        int result;
        opterr=0;//不输出错误信息
        while((result=getopt(argc,argv,"ab:c::")) !=-1)//当没有其他参数可供解析或者出错时,getopt返回-1,同时optind存储第一个未知或者出错选项的下标
        {
                switch(result)
                {
                        case 'a':
                        printf("option=a,optopt=%c,optarg=%s\n",optopt,optarg);
                        break;
                        case 'b':
                        printf("option=b,optopt=%c,optarg=%s\n",optopt,optarg);
                        break;
                        case 'c':
                        printf("option=c,optopt=%c,optarg=%s\n",optopt,optarg);
                        break;
                        case '?':
                        printf("result=?,optopt=%c,optarg=%s\n",optopt,optarg);//当命令行选项字符不包括在optstring里或者选项缺少必要参数时
                        break;
                        default:
                        printf("default,result=%c\n",result);
                        break;
                        }
                printf("argv[%d]=%s\n",optind,argv[optind]);
                }
        printf("result=-1,option=%d\n",optind);
        for(result=optind;result<argc;result++)
                printf("-----argv[%d]=%s\n",result,argv[result]);
        for(result=1;result<argc;result++)
                 printf("at the end-----argv[%d]=%s\n",result,argv[result]);
        return 0;
        }
                                                               
[root@sun 命令行选项及参数]# ./getopt -a host -b hello -cworld -d
option=a,optopt=,optarg=(null)
argv[2]=host
option=b,optopt=,optarg=hello
argv[5]=-cworld
option=c,optopt=,optarg=world
argv[6]=-d
result=?,optopt=d,optarg=(null)
argv[7]=(null)
result=-1,option=6
-----argv[6]=host
at the end-----argv[1]=-a
at the end-----argv[2]=-b
at the end-----argv[3]=hello
at the end-----argv[4]=-cworld
at the end-----argv[5]=-d
at the end-----argv[6]=host

 

getlongopt()用来获取命令行参数

getlongopt(int argc,char **argv,const char *shotopts,const struct *longopts,int *longind)

支持长参数

 posted on 2013-11-22 22:54  瞌睡的美人鱼  阅读(579)  评论(0编辑  收藏  举报