名 前
argz_add, argz_add_sep, argz_append, argz_count, argz_create, argz_create_sep, argz_delete, argz_extract, argz_insert, argz_next, argz_replace, argz_stringify − argz リ ス ト を 操 作 す る た め の 関 数 群
書 式
#include <argz.h>
error_t argz_add(char **argz, size_t *argz_len, const char *str);
error_t
argz_add_sep(char **argz, size_t
*argz_len,
const char *str, int
delim);
error_t
argz_append(char **argz, size_t
*argz_len,
const char *buf, size_t
buf_len);
size_t argz_count(const char *argz, size_t argz_len);
error_t
argz_create(char * const argv[], char
**argz,
size_t *argz_len);
error_t
argz_create_sep(const char *str, int
sep, char **argz,
size_t *argz_len);
void argz_delete(char **argz, size_t *argz_len, char *entry);
void argz_extract(const char *argz, size_t argz_len, char **argv);
error_t
argz_insert(char **argz, size_t
*argz_len, char *before,
const char *entry);
char *argz_next(const char *argz, size_t argz_len, const char *entry);
error_t
argz_replace(char **argz, size_t
*argz_len, const char *str,
const char *with, unsigned int
*replace_count);
void argz_stringify(char *argz, size_t len, int sep);
説 明
こ れ ら の 関 数 は glibc 固 有 で あ る 。
argz vector は 長 さ 情 報 付 き の 文 字 バ ッ フ ァ ー へ の ポ イ ン タ ー で あ る 。 文 字 バ ッ フ ァ ー で は 、 複 数 の 文 字 列 が ヌ ル バ イ ト ('\0') で 区 切 ら れ て お り 、 文 字 列 の 配 列 と し て 解 釈 さ れ る よ う に な っ て い る 。 長 さ が 0 で な い 場 合 、 バ ッ フ ァ ー の 最 後 の バ イ ト は ヌ ル バ イ ト で な け れ ば な ら な い 。 こ れ ら の 関 数 は argz vector を 操 作 す る た め の も の で あ る 。 ペ ア (NULL,0) は argz vector で あ り 、 逆 に 言 え ば 長 さ 0 の argz vectorは ヌ ル ポ イ ン タ ー を 持 た な け れ ば な ら な い 。 空 で な い argz vector の 割 り 当 て は malloc(3) を 使 っ て 行 わ れ る 。 し た が っ て 、 argz vector を 解 放 す る の に free(3) を 使 う こ と が で き る 。
argz_add() は 、 文 字 列 str を 配 列 *argz の 末 尾 に 追 加 し 、 *argz と *argz_len を 更 新 す る 。
argz_add_sep() も 同 様 の 動 作 を す る が 、 区 切 り 文 字 delim に し た が っ て 文 字 列 str を 複 数 の 文 字 列 に 分 割 す る 点 が 異 な る 。 例 え ば 、 区 切 り 文 字 ':' を 指 定 し て 、 UNIX サ ー チ パ ス に 対 し て こ の 関 数 を 使 う こ と が で き る だ ろ う 。
argz_append() は argz vector (buf, buf_len) の 後 ろ に (*argz, *argz_len) を 付 け 加 え 、 *argz と *argz_len を 更 新 す る 。 (し た が っ て 、 *argz_len は buf_len だ け 増 加 す る 。 )
argz_count() は (argz, argz_len) 内 の 文 字 列 の 数 を 数 え る 。 実 際 に は ヌ ル バ イ ト ('\0') の 数 を 数 え て い る 。
argz_create() は 、 UNIX 流 の 引 き 数 ベ ク ト ル で あ る ((char *) 0 で 終 端 さ れ る ) argv を 、 argz vector (*argz, *argz_len) に 変 換 す る 。
argz_create_sep() は 、 ヌ ル 終 端 さ れ た 文 字 列 str を 区 切 り 文 字 sep が 現 れ る 毎 に 分 割 し な が ら 、 argz vector (*argz, *argz_len) に 変 換 す る 。
argz_delete() は 、 entry で 指 し 示 さ れ た 文 字 列 を argz vector (*argz, *argz_len) か ら 削 除 し 、 *argz と *argz_len を 更 新 す る 。
argz_extract() は argz_create() の 反 対 の 操 作 を 行 う 。 argz vector (argz, argz_len) を 調 べ 、 argv か ら 始 ま る 配 列 を サ ブ 文 字 列 へ の ポ イ ン タ ー で 埋 め て い き 、 一 番 最 後 に NULL を 入 れ て 、 UNIX 流 の argv ベ ク ト ル を 作 成 す る 。 配 列 argv は argz_count(argz,argz_len) + 1 個 の ポ イ ン タ ー を 収 容 で き る 空 間 を 持 っ て い な け れ ば な ら な い 。
argz_insert() は argz_delete() の 反 対 の 操 作 を 行 う 。 argz vector (*argz, *argz_len) の 位 置 before に 引 き 数 entry を 挿 入 し 、 *argz と *argz_len を 更 新 す る 。 before が NULL の 場 合 、 entry は 末 尾 に 挿 入 さ れ る 。
argz_next() は argz vector を 順 番 に 調 べ る た め の 関 数 で あ る 。 entry が NULL の 場 合 、 最 初 の エ ン ト リ ー を 返 す 。 そ う で な い 場 合 、 次 の エ ン ト リ ー を 返 す 。 次 の エ ン ト リ ー が な い 場 合 、 NULL を 返 す 。
argz_replace() は 、 str を す べ て with で 置 き 換 え る (必 要 に 応 じ て argz の 再 割 り 当 て を 行 う )。 replace_count が NULL で な い 場 合 、 *replace_count を 置 き 換 え を 行 っ た 数 だ け 増 や す 。
argz_stringify() は argz_create_sep() の 反 対 の 操 作 を 行 う 。 末 尾 の ヌ ル バ イ ト 以 外 の 全 て の ヌ ル バ イ ト ('\0') を sep で 置 き 換 え て 、 argz vector を 通 常 の 文 字 列 に 変 換 す る 。
返 り 値
メ モ リ ー 割 り 当 て を 行 う argz 関 数 群 は す べ て error_t 型 の 返 り 値 を 持 つ 。 成 功 し た 場 合 は 0 を 返 し 、 割 り 当 て エ ラ ー が 発 生 し た 場 合 は ENOMEM を 返 す 。
準 拠
こ れ ら の 関 数 は GNU に よ る 拡 張 で あ る 。 注 意 し て 使 用 す る こ と 。
バ グ
ヌ ル バ イ ト で 終 端 さ れ て い な い argz vector を 使 用 し た 場 合 、 segmentation fault を 起 こ す か も し れ な い 。
関 連 項 目
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。