日本-日本語
日本HPホーム 製品 & サービス OpenVMS製品情報
≫  お問い合わせ


OpenVMS マニュアル


 

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

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

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


目次 索引




パターンに一致するパス名を生成します。

形式

#include <glob.h>

int glob (const char *pattern, int flags, int (*errfunc)(const char *epath, int eerrno), glob_t *pglob);

関数バリアント glob関数には, _glob32および _glob64というバリアントがあり,それぞれ 32 ビットと 64 ビットのポインタ・サイズで使用します。ポインタ・サイズ固有の関数の使用方法については,第 1.9 節を参照してください。

引数



pattern

アクセス可能なパス名と比較するファイル名パターン。

flags

glob関数でカスタマイズ可能な動作を制御します。

errfunc

glob関数がエラー状態を検出した際に呼び出される関数 (オプション)。

pglob

glob_t構造体へのポインタ。この構造体は,呼び出し元が割り当てます。この構造体の配列には, glob関数が pattern 引数と一致するファイル名を検索して格納します。最後のエントリは,NULL です。

glob_t構造体型は, <glob.h>ヘッダ・ファイルで定義されており,少なくとも次のメンバを含んでいます。

size_t   gl_pathc    //Count of paths matched by pattern.  
char **  gl_pathv    //Pointer to a list of matched pathnames.  
size_t   gl_offs     //Slots to reserve at the beginning of gl_pathv.  



epath

ディレクトリがオープンできないか読み込めないために失敗したパス名。

eerrno

epath 引数で指定されるパス名に関する失敗で, opendir関数, readdir関数,または stat関数が設定した errno値。

説明

glob関数は,pattern 引数に一致する,アクセス可能なファイルのリストを作成します。

glob関数は, UNIX モードと OpenVMS モードのどちらかのモードで動作します。

DECC$GLOB_UNIX_STYLE 機能論理名を有効にすることで, UNIX モードを明示的に選択できます。このモードは,デフォルトでは無効になっています。

glob関数は,以下のいずれの状態でもなければ,デフォルトで OpenVMS モードを使用します。以下のいずれかの状態の場合, globは UNIX モードを使用します。

  1. DECC$GLOB_UNIX_STYLE が有効である。

  2. DECC$FILENAME_UNIX_ONLY 機能論理名が有効である。

  3. glob関数が,指定されたパス名指示パターン (ディレクトリ区切り文字など) をチェックし, UNIX 形式のパス名であると判定した。

OpenVMS モード

このモードを使用すると,OpenVMS のプログラマは, OpenVMS 形式のパターンを glob関数に渡し,期待した OpenVMS 形式の出力を得ることができます。 OpenVMS 形式のパターンは,DCL コマンドでユーザが受け取ったり, sys$parse システム・ルーチンおよび sys$search システム・ルーチンへの入力として使用するパターンです。

このモードでは,アスタリスク (*) やパーセント (%) などの,任意の OpenVMS ワイルドカードを使用できます。つまり, OpenVMS システム・コールがサポートしているワイルドカードすべてを使用できます。

OpenVMS モードは,UNIX のワイルドカード,? や [] のパターン・マッチングをサポートしていません。 OpenVMS ユーザは,[] を,ディレクトリ区切り文字として使用します。

他にも,OpenVMS モードと UNIX モードの動作には,相違点があります。

  • OpenVMS モードでは,UNIX モードのような相対ファイル指定ではなく,完全なファイル指定が出力されます。

  • OpenVMS モードでは,GLOB_MARK フラグは無視されます。これは,OpenVMS ではディレクトリにスラッシュ (/) を付加しても意味がないためです。

例:

Sample pattern input      Sample output 
 
[.SUBDIR1]A.TXT           DEV:[DIR.SUBDIR1]A.TXT;1 
[.SUB*]%.*                DEV:[DIR.SUBDIR1]A.TXT;1 

UNIX モード

次のコマンドで,このモードを明示的に有効にできます。

$ DEFINE DECC$GLOB_UNIX_STYLE ENABLE 

UNIX モードは, DECC$FILENAME_UNIX_ONLY 機能論理名が設定されている場合や,指定されたパターンが UNIX 形式のパス名であると glob関数が判断した場合にも,有効になります。

UNIX モードでは, glob関数は,以下の拡張ファイル・システム (EFS) 上の制限を満たす範囲で,可能なかぎり X/Open 仕様に従います。

  • ファイル名に大文字と小文字が混在していても,表示上の意味しかありません。名前が "a" と "A" のファイルは,同じファイルです。ファイル名は,最初に作成されたときのとおりに大文字小文字を区別して表示されます。

  • 次の文字を,ファイル名に含めることはできません。

    ?  * 
    

例:

Sample pattern input      Sample output 
 
./a/b/c                   ./a/b/c 
./?/b/*                   ./a/b/c 
[a-c]                     c 

共通の説明

glob関数は,アクセス可能なすべてのパス名をパターンと比較し,一致するすべてのパス名のリストを作成します。パス名にアクセスするためには, glob関数は,最後以外の各パス名コンポーネントに対する検索パーミッションと, pattern 引数の各ファイル名コンポーネントの各ディレクトリに対する読み込みパーミッションを必要とします。

glob関数は,一致したパス名の数と,パス名へのポインタのリストへのポインタを pglob 引数に格納します。パス名は,現在のロケールの LC_COLLATE カテゴリの設定に基づいてソートされます。最後のパス名の後の最初のポインタは,NULL です。どのパス名ともパターンが一致しない場合,一致したパス名の数として 0 が返されます。

pglob 引数が指す構造体は,呼び出し元が作成しなければなりません。 glob関数は,必要に応じて他の領域も割り当てます。 globfree関数は,以前の glob関数呼び出しの結果として pglob 引数に関連して割り当てられた領域を解放します。

flags 引数は, glob関数の動作を制御するために使用されます。 flags 値は,以下の定数の,ビット単位の論理和です。これらの定数は, <glob.h>ヘッダ・ファイルで定義されています。

GLOB_APPEND 以前に検索されたパス名に,この呼び出しで検索されたパス名を付加します。
GLOB_DOOFFS gl_offs メンバを使用して, pglob 引数の gl_pathv コンポーネントの始めに追加する NULL ポインタの数を指定します。
GLOB_ERR オープンや読み込みができないディレクトリを検出した場合に glob 関数が戻るようにします。 GLOB_ERR フラグが設定されていない場合, glob 関数は,オープンや読み込みができないディレクトリを検出しても,検索を続けます。
GLOB_MARK ディレクトリである各パス名にスラッシュ (/) を付加する必要があることを指定します。 OpenVMS モードでは,GLOB_MARK は無視されます。これは, OpenVMS システムではディレクトリにスラッシュを付加しても意味がないためです。
GLOB_NOCHECK pattern 引数がどのパス名とも一致しなかった場合, glob 関数は, pattern 引数だけからなるリストを返し,一致したパス名の数を 1 とします。
GLOB_NOESCAPE GLOB_NOESCAPE フラグを設定した場合,バックスラッシュ (\) は,メタキャラクタをエスケープするためには使用できません。

GLOB_APPEND フラグを使用すると, glob関数の以前の呼び出しで見つかったパス名に,新しいパス名のセットを追加できます。以下の規則は,同じ pglob 引数値で glob関数への呼び出しを複数回行い,その間に globfree関数を呼び出さない場合に適用されます。

  • アプリケーションが glob関数の 1 回目の呼び出しで GLOB_DOOFFS フラグを設定した場合,このフラグは 2 回目の呼び出しでも設定され, pglob 引数の gl_offsフィールド値は,これらの呼び出しの間で変更されません。

  • アプリケーションが glob関数の 1 回目の呼び出しで GLOB_DOOFFS フラグを設定しなかった場合,このフラグは 2 回目の呼び出しでも設定されません。

  • 2 回目の呼び出しの後, pglob-> gl_pathvは,次の情報を含むリストを指します。

    • GLOB_DOOFFS フラグと pglob-> gl_offsで指定された,ゼロ個以上の NULL。

    • 呼び出し前に pglob-> gl_pathvリストにあった,パス名へのポインタ。ポインタの順序は, glob関数の 1 回目の呼び出し後と同じです。

    • 2 回目の呼び出しで作成された新しいパス名へのポインタ (指定された順序)。

  • pglob-> gl_offs引数で返されるカウントは,2 つの呼び出しで返されるパス名の合計数です。

  • アプリケーションは,2 つの呼び出しの間で, pglob-> gl_pathcフィールドや pglob-> gl_pathvフィールドを変更してはなりません。

成功して完了すると, glob関数は値 0 (ゼロ) を返します。 pglob-> gl_pathcフィールドは,一致したパス名の数を返します。 pglob-> gl_pathvフィールドには,一致したパス名をソートした, NULL で終了するリストへのポインタが格納されています。 pglob-> gl_pathc内の,一致したパス名の数が 0 (ゼロ) の場合, pglob-> gl_pathv引数のポインタの値は定義されていません。

glob関数がエラーで終了した場合,この関数は,ゼロ以外の定数 GLOB_ABORTED,GLOB_NOMATCH,または GLOB_NOSPACE ( <glob.h>ヘッダ・ファイルに定義されています) のいずれかを返します。この場合,pglob 引数の値は,やはり上記で定義されたとおりに設定されます。

検索中,オープンできないか読み込めないディレクトリを検出し, errfunc 引数値が NULL でなかった場合は, glob関数は 2 つの引数 epatheerrno を指定して errfunc を呼び出します。

epath--- ディレクトリがオープンできないか読み込めないために失敗したパス名。
eerrno--- epath 引数で指定されるパス名に関する失敗で, opendir関数, readdir関数,または stat関数が設定した errno値。

errfunc を呼び出して,ゼロ以外が返されるか, flags に GLOB_ERR フラグが設定されている場合, glob関数は,スキャン済みのパス名を反映するために pglob 引数への設定を行った後,スキャンを停止し,GLOB_ABORTED を返します。 GLOB_ERR が設定されておらず,errfunc が NULL であるか, errfunc がゼロを返した場合,エラーは無視されます。

errno 値は返されません。

globfreefnmatchreaddir,および statも参照してください。


戻り値

0 成功を示します。
GLOB_ABORTED GLOB_ERROR が設定されているか, errfunc がゼロ以外の値を返したため,スキャンが停止しました。
GLOB_NOMATCH パターンが既存のパス名と一致せず, flags に GLOB_NOCHECK が設定されていませんでした。
GLOB_NOSPACE メモリを割り当てようとしましたが,失敗しました。


目次 索引

© 2012 Hewlett-Packard Development Company, L.P.