getopt

[戻る]

概要

普段は、コマンドラインのオプション解析は山田君の作ったoption.hを使ってるんだけど、ちょっと目についたので使ってみた。

使い方

#include <stdlib.h>

int getopt(int argc, char * const *argv, const char *optstring);
argc,argvは通常のmain引数をそのまま渡せばよい。
optstringにオプションの一覧を書く。たとえば、-aというオプションを処理したかったら"a"とする。argumentが付くオプションの場合後ろに:を付ける。必要なものを全部ここに書けばよくて、たとえば"ab:"とすれば、-a-b argを取り出してくれる。こういう仕様だから、使えるのは1文字だけ
戻り値はoptstringに書いてある最初に引っかかったオプション。何回も呼ぶと次々に取り出してくれる。
戻り値が?の場合、optstringに書いてないとかargumentが必要なのにないとかいうこを意味する。
戻り値がEOFの場合、最後まで探索したのでもうないとう意味。

具体例

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

int main(int argc, char **argv)
{
  int	c;

  while((c = getopt(argc, argv, "ab:cd:")) != EOF){
    switch(c){
    case 'a':
    case 'c':
      printf("%c(%d) ", optopt, optind);
      break;
    case 'b':
    case 'd':
      printf("%c(%d):%s ", optopt, optind, optarg);
      break;
    case '?':
      printf("?:%c(%d) ", optopt, optind);
      break;
    }
  }
  printf("\n");
  for(; optind < argc; optind++){
    printf("%s(%d) ", argv[optind], optind);
  }
  printf("\n");
  return 0;
}
optoptは今のargvの値。"?"が返ったときなんかこれで、うまくいかなかったオプションがわかる。
optargは、そのオプションのargumentへのポインタ。
optindは、次に探索するargvの添え字。
他にopterrがstdlib.hでexternされてる。これを0にしておくと、異常なとき("?"が返るとき)標準エラー出力にメッセージを表示しない。デフォルトは1で、このときはメッセージを出力する。

最後の方で何をやってるかというと、argumentが必要ないのに付けてしまった場合、そこで探索は終わりになる。で、そこから先の分を表示してみている。

とりあえず、上記のプログラムを走らせてみれば、なんとなく使い方はわかる。


Copyright © 1998 by Jun Takahashi