kazmax - Linux で自宅サーバー

glob - ライブラリコールの説明 - Linux コマンド集 一覧表

  1. 名前
  2. 書式
  3. 説明
  4. 返り値
  5. 準拠
  6. バグ
  7. 注意
  8. 関連項目

名前

glob, globfree - パターンにマッチするパス名を見付ける。glob() によっ て確保されたメモリ領域を解放する。

書式

#include <glob.h>

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

説明

glob ()関数はシェルが用いているルール(   glob (7) 参照)に基づいてパターン pattern にマッチするすべてのパス名を検索する。 チルダ (~) の展開やパラメータ置換は行われない。それらを行いたい場合は   wordexp (3) を使うとよい。

globfree ()関数は前に呼ばれた glob ()により動的に確保された記憶領域を解放する。

glob ()の結果は pglob がポイントする構造体に返される。 pglobglob_t 型の構造体である。 glob_t 型は <glob.h> 内で宣言されており、以下の要素を含んでいる。これらの要素は POSIX.2 で定義 されている(さらに多くの要素が拡張として入っているかもしれない)。



typedef struct {
size_t gl_pathc; /* 今までにマッチしたパスの数 */ char **gl_pathv; /* マッチしたパス名のリスト */ size_t gl_offs; /* `gl_pathv' 内に確保するためのスロット */
} glob_t;

結果は動的に確保された記憶領域に入れられる。

パラメータ flags には以下の示す定数のうち、指定したいものをビットごとの OR で与える(一つも 指定しなくてもよい)。これによって glob ()の動作を変更できる。

GLOB_ERR
読み取りエラー時(例えば、ディレクトリに読み取り許可属性が無い場合など) に関数から戻る。
GLOB_MARK
ディレクトリに一致する各々のパスにスラッシュを付加する。
GLOB_NOSORT
返されるパス名のソートを行わない(デフォルト)。
GLOB_DOOFFS
文字列リスト pglob->pathv の先頭に pglob->gl_offs 個分の領域を確保する。
GLOB_NOCHECK
マッチするパターンが無ければ、元のパターンを返す。
GLOB_APPEND
前の呼び出しの結果に追加する。最初の glob ()の呼び出しの際にはこのフラグを設定してはいけない。
GLOB_NOESCAPE
メタキャラクタはバックスラッシュによってクォートされない。

フラグには以下に示すものも指定できる。これらは POSIX.2 では定義されてい ないが GNU で拡張されたものである。

GLOB_PERIOD
先頭のピリオドはメタキャラクタにマッチする。
GLOB_ALTDIRFUNC
ファイルシステムにアクセスする際に、通常のライブラリ関数の代わりに pglob->gl_closedir , pglob->gl_readdir , pglob->gl_opendir , pglob->gl_lstat , pglob->gl_stat が用いられる。
GLOB_BRACE
csh (1)スタイルの括弧表現 {a,b} が展開される。
GLOB_NOMAGIC
パターンにメタキャラクタが含まれていない場合、そのパターンが返される。
GLOB_TILDE
チルダ (~) の展開が行われる。
GLOB_ONLYDIR
ディレクトリのみがマッチする。

errfunc が NULL でなければ、 エラーが起こった場合には関数 errfunc が呼び出される。関数の引数には、失敗したパス名 epatherrno ( opendir (), readdir (), stat ().のいずれかによってセットされた値)が与えられる。 errfunc が 0 以外の値を返すかもしくは GLOB_ERR がセットされた場合 glob ()は errfunc の呼び出し後に終了する。

呼び出しが成功して戻った場合 pglob->gl_pathc にはマッチしたパス名が含まれ、 pglob->gl_pathv はマッチしたパス名のリストへのポインタとなる。最後のパス名の後の最初の ポインタは NULL である。

glob ()を何度か続けて呼び出すことができる。その際2回目以降の呼び出しでは GLOB_APPEND フラグが flags に設定されていなければならない。

GNU の拡張として、 pglob->gl_flags には指定したフラグがセットされる。もし一つでもメタキャラクタが見付かれば このフラグと GLOB_MAGCHAR との OR を取った結果がセットされる。

返り値

呼び出しが成功して完了すると glob ()は 0 を返す。 それ以外の返り値は以下の通り:

GLOB_NOSPACE
メモリを使い果たした
GLOB_ABORTED
読み取りエラー
GLOB_NOMATCH
一つもマッチしなかった

使用法の一例を以下に示す。以下はシェルで
ls -l *.c ../*.c
をタイプした場合をシミュレートしている。



glob_t globbuf;
globbuf.gl_offs = 2; glob("*.c", GLOB_DOOFFS, NULL, &globbuf); glob("../*.c", GLOB_DOOFFS | GLOB_APPEND, NULL, &globbuf); globbuf.gl_pathv[0] = "ls"; globbuf.gl_pathv[1] = "-l"; execvp("ls", &globbuf.gl_pathv[0]);

準拠

POSIX.2, POSIX.1-2001.

バグ

glob ()関数はその中で呼び出している malloc ()や opendir ()などの関数の呼び出しで失敗が起こると失敗する。 これにより errno にそのエラーコードが入る。

注意

glibc 2.1 では、 gl_pathcgl_offs は POSIX.2 で指定されているように size_t として宣言されている。 libc4, libc5, glibc 2.0 では、 int として宣言されている。

関連項目