GLOB(3) | Linux Programmer's Manual | GLOB(3) |
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() の動作を変更できる。
flags には以下に示すものも指定できる。 これらは GNU で拡張されたもので、POSIX.2 では定義されていない。
errfunc が NULL でなければ、 エラーが起こった場合には関数 errfunc が呼び出される。関数の引数には、失敗したパス名 epath と errno (opendir(3), readdir(3), stat(2). のいずれかによってセットされた値) が与えられる。 errfunc が 0 以外の値を返すかもしくは GLOB_ERR がセットされた場合 glob() は errfunc の呼び出し後に終了する。
呼び出しが成功して戻った場合 pglob->gl_pathc にはマッチしたパス名が含まれ、 pglob->gl_pathv はマッチしたパス名へのポインターのリストへのポインターとなる。 ポインターのリストはヌルポインターで終端される。
glob() を何度か続けて呼び出すことができる。その際2回目以降の呼び出しでは GLOB_APPEND フラグが flags に設定されていなければならない。
GNU の拡張として、 pglob->gl_flags には指定したフラグがセットされる。もし一つでもメタキャラクターが見付かれば このフラグと GLOB_MAGCHAR との OR を取った結果がセットされる。
呼び出しが成功して完了すると glob() は 0 を返す。 それ以外の返り値は以下の通り:
POSIX.2, POSIX.1-2001.
glibc 2.1 では、 gl_pathc と gl_offs は POSIX.2 で指定されているように size_t として宣言されている。 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)
この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。
2014-08-19 | GNU |