GLOB

Section: Linux Programmer's Manual (3)
Updated: 1999-09-12
Index JM Home Page roff page
 

名前

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(3), readdir(3), stat(2). のいずれかによってセットされた値) が与えられる。 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
一つもマッチしなかった
 

準拠

POSIX.2, POSIX.1-2001.  

注意

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

バグ

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

使用法の一例を以下に示す。以下はシェルで

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]);
 

関連項目

ls(1), sh(1), stat(2), exec(3), fnmatch(3), malloc(3), opendir(3), readdir(3), wordexp(3), glob(7)


 

Index

名前
書式
説明
返り値
準拠
注意
バグ
関連項目

This document was created by man2html, using the manual pages.
Time: 04:31:45 GMT, November 19, 2007