BUGS

没有终止空字节的Argz向量可能会导致分段错误。

遵循规范

这些功能是GNU扩展。小心轻放。

另外参见

envz_add(3)

ARGZ_ADD - Linux手册页

Linux程序员手册 第3部分
更新日期: 2019-03-06

返回值

所有进行内存分配的argz函数的返回类型均为error_t,如果成功则返回0,如果发生分配错误则返回ENOMEM。

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/

名称

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列表的函数

属性

有关本节中使用的术语的说明,请参见attribute(7)。

InterfaceAttributeValue
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 safetyMT-Safe

说明

这些功能是glibc特定的。

argz向量是指向字符缓冲区以及长度的指针。字符缓冲区的预期解释是字符串数组,其中字符串由空字节(aq \ 0aq)分隔。如果长度不为零,则缓冲区的最后一个字节必须为空字节。

这些函数用于处理argz向量。对(NULL,0)是argz向量,相反,长度为0的argz向量必须具有空指针。非空argz向量的分配是使用malloc(3)完成的,因此可以使用free(3)再次处置它们。

argz_add()将字符串str添加到数组* argz的末尾,并更新* argz和* argz_len。

argz_add_sep()类似,但是将字符串str拆分为由定界符delim分隔的子字符串。例如,可以在带有分隔符aq:aq的UNIX搜索路径上使用此功能。

argz_append()在(* argz,* argz_len)之后附加argz向量(buf,buf_len)并更新* argz和* argz_len。 (因此,* argz_len将增加buf_len。)

argz_count()以(argz,argz_len)为单位计算字符串数,即空字节数(aq \ 0aq)。

argz_create()将以(char )0结尾的UNIX风格的参数向量argv转换为argz向量(argz,* argz_len)。

argz_create_sep()通过在每次出现分隔符sep时将其终止将空终止的字符串str转换为argz向量(* argz,* argz_len)。

argz_delete()从argz向量(* argz,* argz_len)中删除条目所指向的子字符串并更新* argz和* argz_len。

argz_extract()与argz_create()相反。它使用argz向量(argz,argz_len)并以指向子字符串的指针和最终的NULL填充从argv开始的数组,从而形成UNIX风格的argv向量。数组argv必须有空间容纳argz_count(argz,argz_len)+ 1个指针。

argz_insert()与argz_delete()相反。它将参数条目的位置插入argz向量(* argz,* argz_len)中并更新* argz和* argz_len。如果before为NULL,则将在末尾插入条目。

argz_next()是通过argz向量步进的函数。如果entry为NULL,则返回第一个条目。否则,返回以下条目。如果没有以下条目,则返回NULL。

argz_replace()将每次出现的str替换为,并根据需要重新分配argz。如果replace_count为非NULL,则* replace_count将增加替换次数。

argz_stringify()与argz_create_sep()相反。通过将除最后一个以外的所有空字节(aq \ 0aq)替换为sep,它将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);
日期:2019-08-20 17:59:52 来源:oir作者:oir