Manpages

名 前

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 (bufbuf_len) の 後 ろ に (*argz*argz_len) を 付 け 加 え 、 *argz*argz_len を 更 新 す る 。 (し た が っ て 、 *argz_lenbuf_len だ け 増 加 す る 。 )

argz_count() は (argzargz_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 (argzargz_len) を 調 べ 、 argv か ら 始 ま る 配 列 を サ ブ 文 字 列 へ の ポ イ ン タ ー で 埋 め て い き 、 一 番 最 後 に NULL を 入 れ て 、 UNIX 流 の argv ベ ク ト ル を 作 成 す る 。 配 列 argvargz_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 を 起 こ す か も し れ な い 。

関 連 項 目

envz_add(3)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。