当前位置:  技术问答>linux和unix

getopt()函数

    来源: 互联网  发布时间:2017-02-13

    本文导语:  /* te.c */ #include  #include  void main(int argc, char **argv){ int c; char optstr[]="i:t:"; while((c=getopt(argc,argv,optstr))!=-1){ switch(c){ case 'i': printf("i flagn"); printf("%sn",optarg); break; case 't': printf("t flagn"); printf(...

/* te.c */
#include 
#include 
void main(int argc, char **argv){
int c;
char optstr[]="i:t:";
while((c=getopt(argc,argv,optstr))!=-1){
switch(c){
case 'i':
printf("i flagn");
printf("%sn",optarg);
break;
case 't':
printf("t flagn");
printf("%sn",optarg);
break;
}
}
}

gcc编译运行
$gcc te.c -o a
$./a -i test -t
然后输出为
i flag
nci
./a: option requires an argument -- 't'
也就是说根本就没有进入case 't':中去
求解释?

|
RETURN VALUE
       The getopt() function shall return the next option character specified on the command line.

       A colon ( ':' ) shall be returned if getopt() detects a missing argument and the first character of optstring was a colon ( ':' ).

       A question mark ( '?' ) shall be returned if getopt() encounters an option character not in optstring or detects a missing argument and the first character of
       optstring was not a colon ( ':' ).

       Otherwise, getopt() shall return -1 when all command line options are parsed.


                  while ((c = getopt(argc, argv, ":abf:o:")) != -1) {
                      switch(c) {
                      case 'a':
                          if (bflg)
                              errflg++;
                          else
                              aflg++;
                          break;
                      case 'b':
                          if (aflg)
                              errflg++;
                          else {
                              bflg++;
                              bproc();
                          }
                          break;
                      case 'f':
                          ifile = optarg;
                          break;
                      case 'o':
                          ofile = optarg;
                          break;
                          case ':':       /* -f or -o without operand */
                                  fprintf(stderr,
                                          "Option -%c requires an operandn", optopt);
                                  errflg++;
                                  break;
                      case '?':
                                  fprintf(stderr,
                                          "Unrecognized option: -%cn", optopt);
                          errflg++;
                      }
                  }


这是最标准写法,先case : 解决缺少value的情况,再case ? 解决未知参数的情况,要求optstr以:开头即可

|
char optstr[]="i:t:";
多个:
改为char optstr[]="i:t";
意思不同
按照你的意思t后不跟参数能进入case 't':中去

|
试试加一个分支

case '?':
printf("flag %cn", optopt);
break;

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间javax.swing类joptionpane的类成员方法: getoptions定义及介绍
  • 急,Linux shell脚本问题请教,关于getopts
  • java命名空间javax.security.auth.login类appconfigurationentry的类成员方法: getoptions定义及介绍
  • python getopt 参数处理小示例
  • java命名空间javax.security.auth.callback类confirmationcallback的类成员方法: getoptions定义及介绍
  • 请问getopt的用法
  • java命名空间java.net接口socketoptions的类成员方法: getoption定义及介绍
  • Python getopt模块处理命令行选项实例
  • java命名空间javax.annotation.processing接口processingenvironment的类成员方法: getoptions定义及介绍
  • 新手疑问:getopt_long()重入问题
  • sos 关于getopt
  • 博客 iis7站长之家
  • linux系统中是否存在getopt.h?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3