Scroll to navigation

ARGZ_ADD(3) Руководство программиста Linux ARGZ_ADD(3)

ИМЯ

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 представляет собой указатель на символьный буфер и его длину. Данный символьный буфер следует считать массивом строк, разделённых байтами 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 (bufbuf_len) после (*argz*argz_len) и обновляет *argz и *argz_len (таким образом, *argz_len будет увеличено на buf_len).

Функция argz_count() подсчитывает количество строк, то есть количество байтов null в ('\0'), в (argzargz_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 (argzargz_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 могут привести к ошибкам сегментирования.

СМ. ТАКЖЕ

envz_add(3)

ЗАМЕЧАНИЯ

Эта страница является частью проекта Linux man-pages версии 4.16. Описание проекта, информацию об ошибках и последнюю версию этой страницы можно найти по адресу https://www.kernel.org/doc/man-pages/.

ПЕРЕВОД

Русский перевод этой страницы руководства был сделан Dmitry Bolkhovskikh <d20052005@yandex.ru> и Yuri Kozlov <yuray@komyakino.ru>

Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.

15 сентября 2017 г.