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
型 (integer 型)
の返り値を持つ。
成功した場合は 0
を返し、割り当てエラーが発生した場合は
ENOMEM を返す。
この節で使用されている用語の説明については、
attributes(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() |
Thread safety |
MT-Safe |
これらの関数は GNU
による拡張である。
ヌルバイトで終端されていない
argz vector を使用した場合、
segmentation fault
を起こすかもしれない。
envz_add(3)
この man ページは Linux
man-pages
プロジェクトのリリース
5.10
の一部である。プロジェクトの説明とバグ報告に関する情報は
https://www.kernel.org/doc/man-pages/
に書かれている。