2016-05-21 8 views
-1

私は大学でCを始めましたが、1学期だけでした。私は言語についてもう少し学ぶことに興味があり、小さなコマンドラインアプリケーションを始めました。 コマンドライン引数を解析したい。すべてのコマンドラインアプリケーションはこれに対処しなければならないので、誰かがそれに対処するためにライブラリをリリースしたことがあるのだろうかと思います。確かに、私はif-elseやswitch文で何らかの意思決定を行うことができますが、 ' - 'または ' - 'で始まるコマンドを受け入れようとすると複雑になると思いますし、記述を含む使用可能なコマンドのリストも表示します。 私はWindowsとLinux用のアプリケーションを作っていますので、私はposix専用のGNU Cライブラリを使うことはできませんが、コマンド処理のヘルパーがあります。Cでの引数の解析

tatを達成するには良い方法がありますか、最初から始めなければなりませんか?

+0

[getopt](http://linux.die.net/man/3/getopt) –

+0

はい。それを達成する良い方法があります。 –

答えて

7

getoptは、コマンドライン引数を解析するのに役立ちます。

のgetopt: - getoptのmanページで

構文:

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

のgetopt()関数は、コマンドライン引数を解析します。引数argcとargvは、プログラムの呼び出し時にmain()関数に渡される引数の数と配列です。 ' - 'で始まり(正確に " - "または " - "ではない)argvの要素は、オプション要素です。この要素の文字(最初の ' - '以外)はオプション文字です。 getopt()が繰り返し呼び出された場合、各オプション要素の各オプション文字が順番に返されます。

例: -

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

    int 
    main(int argc, char *argv[]) 
    { 
     int flags, opt; 
     int nsecs, tfnd; 

     nsecs = 0; 
     tfnd = 0; 
     flags = 0; 
     while ((opt = getopt(argc, argv, "nt:")) != -1) { 
      switch (opt) { 
      case 'n': 
       flags = 1; 
       break; 
      case 't': 
       nsecs = atoi(optarg); 
       tfnd = 1; 
       break; 
      default: /* '?' */ 
       fprintf(stderr, "Usage: %s [-t nsecs] [-n] name\n", 
         argv[0]); 
       exit(EXIT_FAILURE); 
      } 
     } 

     printf("flags=%d; tfnd=%d; optind=%d\n", flags, tfnd, optind); 

     if (optind >= argc) { 
      fprintf(stderr, "Expected argument after options\n"); 
      exit(EXIT_FAILURE); 
     } 

     printf("name argument = %s\n", argv[optind]); 

     /* Other code omitted */ 

     exit(EXIT_SUCCESS); 
    } 

のgetopt関数の詳細を読むためにgetopt(3) manページへのリンクをお試しください。

関連する問題