Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all bug

名前

       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_lenbuf_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 ベクトルを作成する。 配列 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 型 (integer 型) の返り値を持つ。 成功し
       た場合は 0 を返し、割り当てエラーが発生した場合は ENOMEM を返す。

属性

       この節で使用されている用語の説明については、 attributes(7) を参照。

       ┌──────────────────────────────────┬───────────────┬─────────┐
       │インターフェース属性      │
       ├──────────────────────────────────┼───────────────┼─────────┤
       │argz_add(), argz_add_sep(),       │ Thread safety │ MT-Safe │
       │argz_append(), argz_count(),      │               │         │
       │argz_create(), argz_create_sep(), │               │         │
       │argz_delete(), argz_extract(),    │               │         │
       │argz_insert(), argz_next(),       │               │         │
       │argz_replace(), argz_stringify()  │               │         │
       └──────────────────────────────────┴───────────────┴─────────┘

準拠

       これらの関数は GNU による拡張である。

バグ

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

関連項目

       envz_add(3)

この文書について

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

                                            2020-11-01                                ARGZ_ADD(3)