名 前
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() は マ ッ
チ す る パ タ ー
ン が な け れ ば
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 が 呼 び 出 さ れ る 。 関 数 の 引 数 に は 、 失 敗 し た パ ス 名 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 を 返 す 。 そ れ 以 外 の 返 り 値 は 以 下 の 通 り :
GLOB_NOSPACE メ
モ リ ー を 使 い
果 た し た
GLOB_ABORTED 読 み 取 り
エ ラ ー
GLOB_NOMATCH 一 つ も マ
ッ チ し な か っ
た
準 拠
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/ に 書 か れ て い る 。