C言語でライブラリ関数getoptを使用してコマンドラインパラメータを解析する方法について
2972 ワード
著作権は作者の所有であり、いかなる形式の転載も作者に連絡して授権を得て出典を明記してください.
短いパラメータを解析できます.短いパラメータとは、オプションの前に「-」が1つしかない場合を指します.
getopt関数
各パラメータの意味:
argc:通常main関数のargc argv:通常main関数のargv optstring:オプションを指定する内容(「ab:c」)で、複数の部分から構成され、それぞれ次の意味を表します.単一文字で、オプションを表します. 単一文字の後にコロンを付けます.このオプションの後にパラメータを付ける必要があることを示します.パラメータは、オプションの直後にあるか、スペースで区切られています.このパラメータのポインタはoptargに割り当てられます. 単一文字の後に2つのコロンが付いています.このオプションの後に1つのパラメータを付けてもいいし、付いていなくてもいいことを示しています.パラメータが付いている場合は、オプションの直後にパラメータをスペースで区切ることはできません.このパラメータのポインタはoptargに割り当てられます.
この関数を呼び出すと、解析された現在のオプションが返されます.このオプションのパラメータはoptargに割り当てられます.このオプションにパラメータがない場合、optargはNULLになります.
一、getopt関数の一般的な使用
新しいファイルc、ファイルに以下の内容を入力します.
次のコマンドを実行してコンパイルします.
コマンドを実行し、次の結果を得ます.コマンド1
結果1
コマンド2
結果2
コマンド3
結果3
二、注意点
1、getopt関数はコマンドラインの最後のパラメータを解析した後、argvのパラメータの順序が変わります.実行されるファイル名は依然として一番前にあり、次の部分はオプションとそのパラメータで、最後に他のパラメータです.実行するコマンドは
出力結果は
getopt関数を用いてコマンドラインパラメータを解析していない場合、argvの内容は次のようになります.
しかしながら、ここでgetopt関数の影響を受けるため、argvの実際の内容は以下の通りである.
2、上述したwhileループが終了するとargvにおけるパラメータ位置が変化するほか、optind変数は、上述したパラメータ位置が変化するargvのように、オプションでもオプションパラメータでもない最初のパラメータを指し、optindは「value」の位置を指す.
短いパラメータを解析できます.短いパラメータとは、オプションの前に「-」が1つしかない場合を指します.
getopt関数
#include
int getopt(int argc,char * const argv[],const char *optstring);
extern char *optarg; //
extern int optind; //argv ( )
各パラメータの意味:
argc:通常main関数のargc argv:通常main関数のargv optstring:オプションを指定する内容(「ab:c」)で、複数の部分から構成され、それぞれ次の意味を表します.
この関数を呼び出すと、解析された現在のオプションが返されます.このオプションのパラメータはoptargに割り当てられます.このオプションにパラメータがない場合、optargはNULLになります.
一、getopt関数の一般的な使用
新しいファイルc、ファイルに以下の内容を入力します.
#include
#include
#include
int main(int argc, char *argv[]) {
int opt = 0;
while ((opt = getopt(argc, argv, "ab:c::")) != -1) {
switch (opt) {
case 'a':
printf("option a: %s
", optarg); // optarg == NULL
break;
case 'b':
printf("option b: %s
", optarg);
break;
case 'c':
printf("option c: %s
", optarg);
break;
}
}
return 0;
}
次のコマンドを実行してコンパイルします.
gcc test.c -o test
コマンドを実行し、次の結果を得ます.コマンド1
./test -a -b 123
結果1
option a: (null)
option b: 123
コマンド2
./test -a -b 123 -c
結果2
option a: (null)
option b: 123
option c: (null)
コマンド3
./test -a -b 123 -cbubble
結果3
option a: (null)
option b: 123
option c: bubble
二、注意点
1、getopt関数はコマンドラインの最後のパラメータを解析した後、argvのパラメータの順序が変わります.実行されるファイル名は依然として一番前にあり、次の部分はオプションとそのパラメータで、最後に他のパラメータです.実行するコマンドは
./test -a value -b 123 key -cbubble
出力結果は
option a: (null)
option b: 123
option c: bubble
getopt関数を用いてコマンドラインパラメータを解析していない場合、argvの内容は次のようになります.
argv[0] = "./test"
argv[1] = "-a"
argv[2] = "value"
argv[3] = "-b"
argv[4] = "123"
argv[5] = "key"
argv[6] = "-cbubble"
しかしながら、ここでgetopt関数の影響を受けるため、argvの実際の内容は以下の通りである.
argv[0] = "./test"
argv[1] = "-a"
argv[2] = "-b"
argv[3] = "123"
argv[4] = "-cbubble"
argv[5] = "value"
argv[6] = "key"
2、上述したwhileループが終了するとargvにおけるパラメータ位置が変化するほか、optind変数は、上述したパラメータ位置が変化するargvのように、オプションでもオプションパラメータでもない最初のパラメータを指し、optindは「value」の位置を指す.