ARGZ_ADD

Section: Linux Programmer's Manual (3)
Updated: 2020-11-01
Index JM Home Page
 

名前

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 (bufbuf_len) の後ろに (*argz*argz_len) を付け加え、 *argz*argz_len を更新する。 (したがって、 *argz_lenbuf_len だけ増加する。)

argz_count() は (argzargz_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 (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() の反対の操作を行う。 末尾の ヌルバイト以外の全てのヌルバイト ('\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/ に書かれている。

関連キーワード

argz, size, sep, create, count, entry, 関数, replace, ARGZ, ヌルバイト

Linux マニュアル 一覧

[man1] [man2] [man3] [man4] [man5] [man6] [man7] [man8]
[a] [b] [c] [d] [e] [f] [g] [h] [i] [j] [k] [l] [m] [n] [o] [p] [q] [r] [s] [t] [u] [v] [w] [x] [y] [z]

 

Index

名前
書式
説明
返り値
属性
準拠
バグ
関連項目
この文書について

This document was created by man2html, using the manual pages.
Time: 12:08:37 GMT, June 11, 2022