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