kazmax - Linux で自宅サーバー

argz_add - ライブラリコールの説明 - Linux コマンド集 一覧表

  1. 名前
  2. 書式
  3. 説明
  4. 返り値
  5. バグ
  6. 準拠
  7. 関連項目

名前

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_targz_add(char **argz, size_t *argz_len, const char *str);
error_targz_add_sep(char **argz, size_t *argz_len,const char *str, int delim);
error_targz_append(char **argz, size_t *argz_len,const char *buf, size_t buf_len);
size_targz_count(const char *argz, size_t argz_len);
error_targz_create(char * const argv[], char **argz,size_t *argz_len);
error_targz_create_sep(const char *str, int sep, char **argz,size_t *argz_len);
error_targz_delete(char **argz, size_t *argz_len, char *entry);
voidargz_extract(char *argz, size_t argz_len, char **argv);
error_targz_insert (char **argz, size_t *argz_len, char *before,const char *entry);
char *argz_next(char *argz, size_t argz_len, const char *entry);
error_targz_replace(char **argz, size_t *argz_len, const char *str,const char *with, unsigned int *replace_count);
voidargz_stringify(char *argz, size_t len, int sep);

説明

これらの関数は glibc 固有である。

argz vector は長さ情報付きの文字バッファへのポインタである。 文字バッファでは、複数の文字列が NULL バイト ('\0') で区切られており、 文字列の配列として解釈されるようになっている。 長さが 0 でない場合、バッファの最後のバイトは NULL バイトでなければならない。

これらの関数は argz vector を操作するためのものである。 ペア (NULL,0) は argz vector であり、逆に言えば 長さ 0 の argz vectorは NULL ポインタを持たなければならない。 空でない 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)内の文字列の数を数える。実際には NULL バイト ('\0') の数を数えている。

argz_create()は、Unix 流の引き数ベクトルである argv((char *) 0 で終端される) を、argz vector (*argz,*argz_len)に変換する。

argz_create_sep()は、NULL 終端された文字列 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()の反対の操作を行う。 末尾の NULL バイト以外の全ての NULL バイト ('\0') を sepで置き換えて、 argz vector を通常の文字列に変換する。

返り値

メモリ割り当てを行う argz 関数群はすべて error_t 型の返り値を持つ。 成功した場合は 0 を返し、割り当てエラーが発生した場合は ENOMEM を返す。

バグ

NULL バイトで終端されていない argz vector を使用した場合、 segmentation fault を起こすかもしれない。

準拠

これらの関数は GNU による拡張である。注意して使用すること。

関連項目

envz(3)