II-14-10. ライブラリの利用例2 (オプション解析ライブラリ)

もうひとつのライブラリ利用例として、コマンドラインオプションを解析するライブラリの使い方を紹介する。コマンドラインオプションとは何か、どのようなスタイルがあるかを説明し、コマンドラインオプション解析ライブラリを用いてプログラムからコマンドラインオプションを解析するやり方を説明する。

【学習の要点】

* プログラムの実行時に必要なパラメータを自由に設定できるようにするためには、コマンドラインのオプションとして設定できるようにすることが有効である。

* popt、getoptなどのコマンドラインのオプションを解析するライブラリを用いることで統一性のあるオプション設定処理が実現できる。

図II-14-10. getopt、poptによるオプション解析

【解説】

プログラムの実行時コマンドラインのオプションにてパラメータを受け取るようにする場合、main関数の引数により設定されたオプションを受け取ることが可能である。

作成するプログラムでオプションを解析する処理を記述した場合、複数のオプションを扱えるようにするにはオプション1つずつに処理を作成していく必要がある。

オプションを解析するライブラリとしてgetoptやpoptといったライブラリが提供されており、これを利用することにより、容易にオプションの解析を行うことが可能となる。

1) getopt

コマンドラインのオプションとして設定された文字列は、「-」や「--」の後に続く「オプション要素」とこれに続いて設定される「引数」の2つに大別して認識する。

getoptはオプションを解析した結果を返すgetopt関数と、引数を返すoptargグローバル変数によって構成され、getopt関数は以下のように引数を指定して使用し、繰り返し呼び出されるごとに次のオプションを返す。

opt = getopt(argc, argv, オプション文字);

argc,argv : main関数の引数によって取得したオプション数とオプション文字列

オプション文字:オプション要素として指定できる文字の文字列

        オプション要素で引数を持つものは、文字の後に「:」をつける。

        -a –b ccc のように指定する場合、”ab:” となる。

getopt関数にてargvにオプション文字として指定した文字が見つかると、optにその文字を返す。見つかったオプションに引数が必要な場合、optargグローバル変数へ引数の文字列を設定する。argvに指定した文字以外のものが見つかると、「?」文字を返す。argvの最後まで解析が終わった場合、-1を返す。

2) popt

getoptと同様にオプションの解析を行うライブラリであるが、以下の点が優れている。

- グローバル変数を使わない

- --help などの長いオプションを扱える

- --help と --usage のメッセージを自動生成する

poptではオプション要素として、「長いオプション」「オプション文字」「引数の有無と型」「オプションの説明」などを構造体として定義する。

poptGetContext関数へmain関数の引数によって取得したオプション数とオプション文字列およびオプション要素として定義した構造体を引数として指定すると、解析結果を返す。

popContext = poptGetContext(NULL, argc, argv, オプション構造体,0);

poptGetNextOpt関数へ解析結果を引数として指定し、繰り返し呼び出すことにより、指定されたオプションを取り出すことができる。解析結果の最後に到達した場合、-1を返す。

rc = poptGetOpt(popContext);

また引数については、poptGetArg関数またはpoptPrrkArg関数にて取得することができる。

rcChar = poptGetArg(popContext);

OSS Course Naviのコンテンツは IPA OSS モデルカリキュラムを基としています。

フォーラム会員企業専用

記事配信

コンテンツ配信

ユーザログイン