argz_add - argz_create,
argz_add(3)
argz_create,
ОБЗОР
#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 представляет собой указатель на символьный буфер и его
длину. Данный символьный буфер следует считать массивом строк, разделённых
байтами null ('\0'). Если длина ненулевая, то последний байт в буфере
должен быть null.
Эти функции предназначены для обработки векторов argz. Пара (null,0)
представляет вектор argz и наоборот, векторы argz длиной 0 должны иметь
указатель null. Размещение непустых векторов argz осуществляется функцией
malloc(3), а для высвобождения пространства можно использовать
free(3).
Функция argz_add() добавляет строку str в конец массива *argz, и
обновляет *argz и *argz_len.
Функция argz_add_sep() делает тоже самое, но разделяет строку str на
подстроки, разделяя их символом delim. Например, это можно использовать
при работе с путями поиска UNIX, где разделителем является ':'.
Функция argz_append() добавляет вектор argz (buf, buf_len) после
(*argz, *argz_len) и обновляет *argz и *argz_len (таким
образом, *argz_len будет увеличено на buf_len).
Функция argz_count() подсчитывает количество строк, то есть количество
байтов null в ('\0'), в (argz, argz_len).
Функция argz_create() преобразует аргумент вектора argv в стиле UNIX,
заканчивающийся (char *) 0, в вектор argz (*argz, *argz_len).
Функция argz_create_sep() преобразует строку str, заканчивающуюся
null, в вектор argz (*argz, *argz_len), разделяя её при каждом
нахождении разделителя sep.
Функция argz_delete() удаляет подстроку, на которую указывает entry,
из вектора argz (*argz, *argz_len) и обновляет *argz и
*argz_len.
Функция argz_extract() является противоположностью argz_create(). Она
берёт вектор argz (argz, argz_len) и заполняет массив, начиная с
argv, указателями на подстроки и завершая его NULL, тем самым создавая
вектор argv в стиле UNIX. Массив argv должен иметь пространство для
argz_count(argz, argz_len) + 1 указателей.
Функция argz_insert() является противоположностью argz_delete(). Она
вставляет аргумент entry с позиции before в вектор (*argz, *argz_len) и обновляет *argz и *argz_len. Если значение before
равно NULL, то значение entry будет вставлено в конец.
Функция argz_next() предназначена для последовательного обхода вектора
argz. Если значение entry равно NULL, то возвращается первый
элемент. Иначе возвращается следующий элемент. Если следующего элемента нет,
то возвращается NULL.
Функция argz_replace() заменяет каждую найденную строку str на
with, изменяя размер argz при необходимости. Если значение
replace_count не равно NULL, то значение *replace_count будет
увеличено на число замен.
Функция argz_stringify() является противоположностью
argz_create_sep(). Она преобразует вектор argz в обычную строку, заменяя
все байты null ('\0'), за исключением последнего, значением sep.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Все функции argz, в которых происходит выделение памяти, возвращают
результат, имеющий тип
error_t: 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()
безвредность в потоках: безвредно (MT-Safe)
СООТВЕТСТВИЕ СТАНДАРТАМ
Данные функции являются расширениями GNU. Используйте с осторожностью.
ДЕФЕКТЫ
Векторы argz без завершающего байта null могут привести к ошибкам
сегментирования.