Manpages

名 前

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() は マ ッ チ す る パ タ ー ン が な け れ ば GLOB_NOMATCH を 返 す 。
GLOB_APPEND
こ の 呼 び 出 し で の 結 果 を 直 前 の glob() の 呼 び 出 し で 返 さ れ た 結 果 の ベ ク ト ル に 追 加 す る 。 最 初 の glob() の 呼 び 出 し の 際 に は こ の フ ラ グ を 設 定 し て は い け な い 。
GLOB_NOESCAPE
バ ッ ク ス ラ ッ シ ュ ('\') を エ ス ケ ー プ 用 文 字 と し て 使 用 で き な い 。 通 常 は 、 バ ッ ク ス ラ ッ シ ュ を 使 っ て 、 次 に 続 く 文 字 を ク ォ ー ト す る こ と で 、 特 別 な 意 味 を 持 つ メ タ キ ャ ラ ク タ ー を 無 効 す る こ と が で き る 。

flags に は 以 下 に 示 す も の も 指 定 で き る 。 こ れ ら は GNU で 拡 張 さ れ た も の で 、 POSIX.2 で は 定 義 さ れ て い な い 。
GLOB_PERIOD
先 頭 の ピ リ オ ド が メ タ キ ャ ラ ク タ ー に マ ッ チ で き る よ う に す る 。 デ フ ォ ル ト で は 、 メ タ キ ャ ラ ク タ ー は 先 頭 の ピ リ オ ド に は マ ッ チ で き な い 。
GLOB_ALTDIRFUNC
フ ァ イ ル シ ス テ ム に ア ク セ ス す る 際 に 、 通 常 の ラ イ ブ ラ リ 関 数 の 代 わ り に 代 替 関 数 pglob−>gl_closedir, pglob−>gl_readdir, pglob−>gl_opendir, pglob−>gl_lstat, pglob−>gl_stat が 用 い ら れ る 。
GLOB_BRACE

{a,b} と い う 形 式 の csh(1) ス タ イ ル の 括 弧 表 現 を 展 開 す る 。 括 弧 表 現 は 入 れ 子 に す る こ と が で き る 。 し た が っ て 、 例 え ば 、 "{foo/{,cat,dog},bar}" と い う パ タ ー ン を 指 定 し た 場 合 に 得 ら れ る 結 果 は 、 4つ の 文 字 列 "foo/", "foo/cat", "foo/dog", "bar" の そ れ ぞ れ に つ い て glob() を 呼 び 出 し た 場 合 と 同 じ に な る 。

GLOB_NOMAGIC パ タ ー ン に メ タ キ ャ ラ ク タ ー が 含 ま れ て い な い 場 合 、 マ ッ チ 結 果 と し て 指 定 さ れ た パ タ ー ン だ け を 返 す 。 パ タ ー ン で 指 定 さ れ た 名 前 の フ ァ イ ル が 存 在 し な い 場 合 で あ っ て も 、 そ の パ タ ー ン が 返 さ れ る 。
GLOB_TILDE
チ ル ダ の 展 開 を 行 う 。 チ ル ダ ('~') が パ タ ー ン 内 の 唯 一 の 文 字 の 場 合 か 、 先 頭 の チ ル ダ の 直 後 の 文 字 が ス ラ ッ シ ュ ('/') の 場 合 、 チ ル ダ を 呼 び 出 し 者 の ホ ー ム デ ィ レ ク ト リ で 置 換 す る 。 先 頭 の チ ル ダ に ユ ー ザ ー 名 が 続 く 場 合 (例 え ば "~andrea/bin")、 チ ル ダ と ユ ー ザ ー 名 を そ の ユ ー ザ ー の ホ ー ム デ ィ レ ク ト リ で 置 換 す る 。 ユ ー ザ ー 名 が 無 効 な 場 合 や ホ ー ム デ ィ レ ク ト リ が 決 定 で き な い 場 合 は 、 置 換 は 実 行 さ れ な い 。
GLOB_TILDE_CHECK
こ の フ ラ グ を 指 定 す る と GLOB_TILDE と 同 様 の 振 舞 い を す る 。 GLOB_TILDE と の 違 い は 、 ユ ー ザ ー 名 が 無 効 だ っ た 場 合 や ホ ー ム デ ィ レ ク ト リ が 決 定 で き な か っ た 場 合 に 、 パ タ ー ン 自 身 を 使 用 す る の で は な く 、 glob() が エ ラ ー を 示 す GLOB_NOMATCH を 返 す こ と で あ る 。
GLOB_ONLYDIR
こ の フ ラ グ は 、 glob() に 対 す る 「 ヒ ン ト 」 で あ り 、 呼 び 出 し 側 が パ タ ー ン に マ ッ チ す る デ ィ レ ク ト リ に し か 興 味 が な い こ と を 知 ら せ る 。 実 装 に お い て フ ァ イ ル の 種 別 情 報 を 簡 単 に 決 定 で き る 場 合 は 、 デ ィ レ ク ト リ で な い フ ァ イ ル は 呼 び 出 し 側 に 返 さ れ な い 。 し か し な が ら 、 呼 び 出 し 側 で は 、 返 さ れ た フ ァ イ ル リ ス ト が デ ィ レ ク ト リ か ど う か を 確 認 し な け れ ば な ら な い 。 (こ の フ ラ グ が 存 在 す る の は 、 呼 び 出 し 側 が デ ィ レ ク ト リ に し か 興 味 が な い 際 に 性 能 を 最 適 化 す る 目 的 の た め だ け で あ る 。 )

errfunc が NULL で な け れ ば 、 エ ラ ー が 起 こ っ た 場 合 に は 関 数 errfunc が 呼 び 出 さ れ る 。 関 数 の 引 数 に は 、 失 敗 し た パ ス 名 epatherrno (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 を 返 す 。 そ れ 以 外 の 返 り 値 は 以 下 の 通 り :

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

準 拠

POSIX.2, POSIX.1−2001.

注 意

glibc 2.1 で は 、 gl_pathcgl_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/ に 書 か れ て い る 。