EN JA
ARGZ_ADD(3)
ARGZ_ADD(3) Linux Programmer's Manual ARGZ_ADD(3)

名前

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 );
 

error_t argz_delete(char ** argz , size_t * argz_len , char * entry );
 

void argz_extract(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(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 は長さ情報付きの文字バッファへのポインタである。文字バッファでは、複数の文字列が NULL バイト (\(aq\0\(aq) で区切られており、文字列の配列として解釈されるようになっている。長さが 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 を複数の文字列に分割する点が異なる。例えば、区切り文字\(aq:\(aq を指定して、UNIX サーチ・パスに対してこの関数を使うことができるだろう。

argz_append() は argz vector ( bufbuf_len) の後ろに (* argz*argz_len) を付け加え、 *argz*argz_len を更新する。 (したがって、 *argz_lenbuf_len だけ増加する。)

argz_count() は ( argzargz_len) 内の文字列の数を数える。実際には NULL バイト (\(aq\0\(aq) の数を数えている。

argz_create() は、UNIX 流の引き数ベクトルである ( (char *) 0 で終端される) argv を、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 ( 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() の反対の操作を行う。末尾の NULL バイト以外の全ての NULL バイト (\(aq\0\(aq) を sep で置き換えて、 argz vector を通常の文字列に変換する。

返り値

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

準拠

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

バグ

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

関連項目

envz_add(3)

この文書について

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