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
がポイントする構造体に返される。
pglob
は
glob_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
が呼び出される。関数の引数には、失敗したパス名
epath
と
errno
(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_pathc
と
gl_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