日本-日本語
≫  お問い合わせ

製品とサービス >  ソフトウェアとOS >  OpenVMS >  マニュアル

OpenVMS マニュアル


 

OpenVMS ドキュメント
ライブラリ

タイトル
目次
まえがき
リファレンス・セクション
   ≫ライブラリ関数一覧
索引
PDF
OpenVMS ホーム

HP OpenVMS
HP C ランタイム・ライブラリ・リファレンス・マニュアル (下巻)


目次 索引




UNIX コマンド・ラインの規則に従うアプリケーションで使用できるコマンド・ライン・パーサ。

形式

#include <unistd.h> (X/Open, POSIX-1)

#include <stdio.h> (X/Open, POSIX-2)

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

extern char *optarg;

extern int optind, opterr, optopt;


引数



argc

mainに渡される引数の数。

argv

mainに渡される引数配列。

optstring

認識されるオプション文字で構成される文字列。文字の後にコロンが続く場合,そのオプションは引数を受け付けます。

説明

変数 optindは,処理する argv ベクタの次の要素のインデックスです。この変数はシステムで 1 に初期化され, argv の各要素の処理が終了したきに, getoptによって更新されます。 argv の 1 つの要素に複数のオプション文字が含まれている場合は,どのオプションが処理済みかを getoptがどのように判断するかは不定です。

getopt関数は,argv のオプション文字のうち, optstring の文字と一致する次のオプション文字 ( そのような文字が見つかった場合 ) を返します。オプションが引数を受け付ける場合は, getoptは変数 optargを,次に示すようにオプション引数を指すポインタに設定します。

  • オプションが argv の要素によって示される文字列内の最後の文字である場合は, optargには argv の次の要素が格納され, optindに 2 が加算されます。 optindの結果値が argc より小さくない場合は, getoptはエラーを返し,オプション引数が不足していることを示します。

  • それ以外の場合, optargは, argv のその要素内のオプション文字の後の文字列を指し, optindに 1 を加算します。

次のいずれかの条件が満たされる場合, getoptoptindを変更せずに, - 1 を返します。

argv[ optind] が NULL ポインタである
*argv[ optind] が文字 -- でない
argv[ optind] が文字列 "--" を示している

argv[ optind] が文字列 "-- --" を指す場合, getoptは, optindを増分した後, - 1 を返します。

getoptoptstring に含まれていないオプション文字を検出すると,疑問符 (?) を返します。

getoptが不足している引数を検出した場合, optstring の 1 文字目がコロンのときは,コロン文字 (:) を返します。それ以外の場合は,疑問符を返します。

上記の 2 つの場合, getoptは変数 optoptを,エラーの原因となったオプション文字に設定します。アプリケーションで変数 opterrを 0 に設定しておらず, optstring の 1 文字目がコロンでない場合は, getoptは診断メッセージを stderrにプリントします。


戻り値

x コマンド・ラインに指定した次のオプション文字。

getopt が不足している引数を検出し, optstring の 1 文字目がコロンの場合は,コロンを返します。

getopt optstring にないオプション文字を検出した場合や,不足している引数を検出し, optstring の 1 文字目がコロンでない場合は,疑問符を返します。

-1    すべてのコマンド・ライン・オプションが解析された場合。


次の例は,ユーティリティに対する引数の処理方法を示しています。このユーティリティは,同時に組み合わせて指定することができないオプション ab,およびオプション fo を受け付けることができ,この 2 つのオプションはいずれも引数を必要とします。

#include <unistd.h> 
 
int main (int argc, char *argv[ ]) 
{ 
         int c; 
         int bflg, aflg, errflg; 
         char *ifile; 
         char *ofile; 
         extern char *optarg; 
         extern int optind, optopt; 
         . 
         . 
         . 
         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 operand\n"' optopt); 
                        errflg++; 
                        break; 
                case '?': 
                        fprintf (stderr, 
                                "Unrecognized option -%c\n"' optopt); 
                        errflg++; 
                }   
         }               
         if (errflg) { 
                fprintf (stderr, "usage: ..."); 
                exit(2); 
         } 
         for ( ; optind < argc; optind++)  { 
                if (access(argv[optind], R_OK)) { 
         . 
         . 
         . 
} 

このサンプル・コードは,以下のいずれも等価なものとして受け付けます。

cmd -ao arg path path 
cmd -a -o arg path path 
cmd -o arg -a path path 
cmd -a -o arg -- path path 
cmd -a -oarg path path 
cmd -aoarg path path 


目次 索引

印刷用画面へ
プライバシー 本サイト利用時の合意事項 ウェブマスターに連絡