首页 > 代码库 > getopt

getopt

#include<stdio.h>#include<unistd.h>int main(int argc,char *argv[]) {   int ch;   opterr=0;   while((ch=getopt(argc,argv,"a:b:c:d:e:"))!=-1)   {     printf("\n\n\n");     printf("optind:%d\n",optind);     printf("optarg:%s\n",optarg);     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:%c\n",ch);     }     printf("optopt+%c\n",optopt);   } }// ./a.out -b 2222 -a 1111 -a 3333 -c 4444 -d 5555 -e 6666/* optarg和optind是两个最重要的external变量。optarg是指向参数的指针(当然这只针对有参数的选项);optind是argv[]数组的索引,众所周知,argv[0]是函数名称,所有参数从argv[1]开始,所以optind被初始化设置指为1。每调用一次getopt()函数,返回一个选项,如果该选项有参数,则optarg指向该参数。                  在命令行选项参数再也检查不到optstring中包含的选项时,返回-1。optstring是getopt()中第3个参数,作为选项的字符串的列表。函数getopt()认为optstring中,以‘-’开头的字符(注意!不是字符串!!)就是命令行参数选项,有的参数选项后面可以跟参数值。optstring中的格式规范如下: 1) 单个字符,表示选项, 2) 单个字符后接一个冒号”:”,表示该选项后必须跟一个参数值。参数紧跟在选项后或者以空格隔开。该参数的指针赋给optarg。 3) 单个字符后跟两个冒号”:”,表示该选项后必须跟一个参数。                                                                        参数必须紧跟在选项后不能以空格隔开。该参数的指针赋给optarg。*/int main1(int argc, char **argv){    int result;    opterr = 0;  //使getopt不行stderr输出错误信息    while( (result = getopt(argc, argv, "ab:c::")) != -1 )    {           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);                    break;              default:                   printf("default, result=%c\n",result);                   break;           }        printf("argv[%d]=%s\n", optind, argv[optind]);    }    printf("result=-1, optind=%d\n", optind);   //看看最后optind的位置    for(result = optind; result < argc; result++)         printf("-----argv[%d]=%s\n", result, argv[result]); //看看最后的命令行参数,看顺序是否改变了哈。    for(result = 1; result < argc; result++)          printf("\nat the end-----argv[%d]=%s\n", result, argv[result]);    return 0;}


#include<stdio.h>
#include<unistd.h>
int main(int argc,char **argv)
{
int ch;
opterr = 0;
while((ch = getopt(argc,argv,"a:b::cde"))!= -1)
switch(ch)
{
case ‘a‘: printf("option a:‘%s‘\n",optarg); break;
case ‘b‘: printf("option b:‘%s‘\n",optarg); break;
default: printf("other option :%c\n",ch);
}
printf("optopt +%c\n",optopt);
}

 

 

 

getopt