码迷,mamicode.com
首页 > 其他好文 > 详细

getopt()函数

时间:2015-08-21 23:08:39      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:

在讨论这个函数之前我们先理解两个概念:选项及其参数

  gcc -o program program.c 

  在上述命令中 -o 就是其选项 program就是参数。

getopt();

  头文件: 

    #include<unistd.h>

  函数原型:  

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

    argc为参数个数,argv是一个指针数组。

  外部变量

   extern char *optarg;   //选项的参数指针,指向下一个要扫描的参数

           extern int optind,        //索引为下一个要处理的指针的下标

           extern int opterr,        //当opterr=0时,getopt不向stderr输出错误信息;相反,不为0,就会向sterr打印一条错误信息

           extern int optopt;       //用于储存错误或不可知的信息,当命令行选项字符不包括在optstring中或者选项缺少必要的参数时,该选项存储在optopt,getopt返回问号(?)。

  optstring参数所做的规定

    1.单个字符,表示选项,
    2.单个字符后接一个冒号(:)表示该选项后必须跟一个参数。参数紧跟在选项后或者以空格隔开。该参数的指针赋给optarg。
    3 单个字符后跟两个冒号(::),表示该选项后的参数可有可无。如果有,则参数必须紧跟在选项后不能以空格隔开。该参数的指针赋给optarg。

e.g.

  /*getopt.c*/
1
#include<stdio.h> 2 #include<stdlib.h> 3 #include<unistd.h> 4 int main(int argc,char *argv[]) 5 { 6 int opt; 7 while((opt=getopt(argc,argv,"ab:c::"))!=-1){ 8 switch(opt){ 9 case a: 10 printf("option: %c\n",opt); 11 break; 12 case b: 13 printf("optarg1: %s\n",optarg); 14 break; 15 case c: 16 printf("optarg2: %s\n",optarg); 17 break; 18 case ?: 19 printf("unknown option :%c\n",optopt); 20 break; 21 } 22 } 23 for(;optind<argc;optind++) 24 printf("argument: %s\n",argv[optind]); 25 exit(0); 26 }

 编译 gcc -o getopt getopt.c 

 第一次运行 ./getopt -a -b "i am ok" -c 

   结果   

    option: a

    optarg1: i am ok

    optarg2: (null)       

 

 第二次运行 ./getopt -a -b "i am ok" -c"I AM OK"

 结果

    option: a

    optarg1: i am ok

    optarg2: I AM OK

 

  

 

getopt()函数

标签:

原文地址:http://www.cnblogs.com/weiyongjian/p/4746438.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!