1 .\" Copyright 2002 walter harms (walter.harms@informatik.uni-oldenburg.de)
2 .\" Distributed under GPL
3 .\" based on the description in glibc source and infopages
5 .\" Corrections and additions, aeb
7 .\" Japanese Version Copyright (c) 2002 Akihiro MOTOKI, all rights reserved.
8 .\" Translated Mon Feb 2 2003 by Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
10 .TH ARGZ_ADD 3 2007-05-18 "" "Linux Programmer's Manual"
12 argz_add, argz_add_sep, argz_append, argz_count, argz_create,
13 argz_create_sep, argz_delete, argz_extract, argz_insert,
14 argz_next, argz_replace, argz_stringify \- argz リストを操作するための関数群
17 .B "#include <argz.h>"
19 .BI "error_t argz_add(char **" argz ", size_t *" argz_len \
20 ", const char *" str );
22 .BI "error_t argz_add_sep(char **" argz ", size_t *" argz_len ,
24 .BI "const char *" str ", int " delim );
26 .BI "error_t argz_append(char **" argz ", size_t *" argz_len ,
28 .BI "const char *" buf ", size_t " buf_len );
30 .BI "size_t argz_count(const char *" argz ", size_t " argz_len );
32 .BI "error_t argz_create(char * const " argv "[], char **" argz ,
34 .BI "size_t *" argz_len );
36 .BI "error_t argz_create_sep(const char *" str ", int " sep ", char **" argz ,
38 .BI "size_t *" argz_len );
40 .BI "error_t argz_delete(char **" argz ", size_t *" argz_len ", char *" entry );
42 .BI "void argz_extract(char *" argz ", size_t " argz_len ", char **" argv );
44 .BI "error_t argz_insert(char **" argz ", size_t *" argz_len ", char *" before ,
46 .BI "const char *" entry );
48 .BI "char *argz_next(char *" argz ", size_t " argz_len ", const char *" entry );
50 .BI "error_t argz_replace(char **" argz ", size_t *" argz_len \
51 ", const char *" str ,
53 .BI "const char *" with ", unsigned int *" replace_count );
55 .BI "void argz_stringify(char *" argz ", size_t " len ", int " sep );
60 argz vector は長さ情報付きの文字バッファへのポインタである。
61 文字バッファでは、複数の文字列が NULL バイト (\\(aq\\0\\(aq) で区切られており、
62 文字列の配列として解釈されるようになっている。
63 長さが 0 でない場合、バッファの最後のバイトは NULL バイトでなければならない。
65 これらの関数は argz vector を操作するためのものである。
66 ペア (NULL,0) は argz vector であり、逆に言えば
67 長さ 0 の argz vectorは NULL ポインタを持たなければならない。
68 空でない argz vector の割り当ては
70 を使って行われる。したがって、argz vector を解放するのに
91 例えば、区切り文字 \\(aq:\\(aq を指定して、UNIX サーチ・パスに対して
96 .RI ( buf ,\ buf_len )
98 .RI (* argz ,\ *argz_len )
112 .RI ( argz ,\ argz_len )
113 内の文字列の数を数える。実際には NULL バイト (\\(aq\\0\\(aq) の数を数えている。
121 .RI ( *argz ,\ *argz_len )
124 .BR argz_create_sep ()
129 が現れる毎に分割しながら、argz vector
130 .RI (* argz ,\ *argz_len )
136 で指し示された文字列を argz vector
137 .RI ( *argz ,\ *argz_len )
147 の反対の操作を行う。argz vector
148 .RI ( argz ,\ argz_len )
151 から始まる配列をサブ文字列へのポインタで埋めていき、
152 一番最後に NULL を入れて、UNIX 流の argv ベクトルを作成する。
156 .IR argz_count ( argz , argz_len ") + 1"
157 個のポインタを収容できる空間を持っていなければならない。
162 の反対の操作を行う。argz vector
163 .RI ( *argz ,\ *argz_len )
179 は argz vector を順番に調べるための関数である。
181 が NULL の場合、最初のエントリを返す。
183 次のエントリがない場合、NULL を返す。
190 で置き換える (必要に応じて argz の再割り当てを行う)。
196 .BR argz_stringify ()
198 .BR argz_create_sep ()
200 末尾の NULL バイト以外の全ての NULL バイト (\\(aq\\0\\(aq) を
203 argz vector を通常の文字列に変換する。
205 メモリ割り当てを行う argz 関数群はすべて \fIerror_t\fP 型の返り値を持つ。
206 成功した場合は 0 を返し、割り当てエラーが発生した場合は
209 これらの関数は GNU による拡張である。注意して使用すること。
211 NULL バイトで終端されていない argz vector を使用した場合、
212 segmentation fault を起こすかもしれない。