Linux Man на русском

  User    Syst    Libr    Device    Files    Other    Admin  



   envz_add - envz_strip

envz_add(3) envz_strip


ОБЗОР

#include <envz.h>
error_t envz_add(char **envz, size_t *envz_len,
const char *name, const char *value);
char *envz_entry(const char *envz, size_t envz_len, const char *name);
char *envz_get(const char *envz, size_t envz_len, const char *name);
error_t envz_merge(char **envz, size_t *envz_len,
const char *envz2, size_t envz2_len, int override);
void envz_remove(char **envz, size_t *envz_len, const char *name);
void envz_strip(char **envz, size_t *envz_len);


ОПИСАНИЕ

Эти функции есть только в glibc.

Вектор argz представляет собой указатель на символьный буфер и его длину (смотрите argz_add(3)). Вектор envz является особым вектором argz, в нём содержатся строки вида «имя=значение». Всё, что расположено за первым '=', считается значением. Если '=' отсутствует, то значение считается равным NULL (если '=' указано в конце, то значение равно пустой строке "").

Эти функции предназначены для работы с векторами envz.

Функция envz_add() добавляет строку "name=value" (если name не равно NULL) или "name" (если value равно NULL) в вектор envz (*envz*envz_len) и обновляет *envz и *envz_len. Если запись с таким значением name уже существует, то она удаляется.

Функция envz_entry() ищет значение name в векторе envz (envzenvz_len) и возвращает запись, если такое имя найдено, и NULL, если не найдено.

Функция envz_get() ищет значение name в векторе envz (envzenvz_len) и возвращает значение, если такое имя найдено, и NULL, если не найдено (заметим, что значение само по себе может быть равно NULL, особенно, если есть запись для name без знака '=').

Функция envz_merge() добавляет все записи из envz2 в *envz, как если бы это делалось с помощью envz_add(). Если значение override истинно, то значения в envz2 будут заменять значения с такими же именами в *envz, иначе — нет.

Функция envz_remove() удаляет запись для name из (*envz*envz_len), если она есть.

Функция envz_strip() удаляет все записи со значением NULL.


ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

Все функции envz, в которых происходит выделение памяти, возвращают результат, имеющий тип error_t: 0 — при успешном выполнении и ENOMEM — при ошибке выделения памяти.


АТРИБУТЫ

Описание терминов данного раздела смотрите в attributes(7).

Интерфейс Атрибут Значение
envz_add(), envz_entry(),
envz_get(), envz_merge(),
envz_remove(), envz_strip() безвредность в потоках: безвредно (MT-Safe)


СООТВЕТСТВИЕ СТАНДАРТАМ

Данные функции являются расширениями GNU. Используйте с осторожностью.


ПРИМЕР

#include <stdio.h>
#include <stdlib.h>
#include <envz.h>
int
main(int argc, char *argv[], char *envp[])
{
    int i, e_len = 0;
    char *str;
    for (i = 0; envp[i] != NULL; i++)
        e_len += strlen(envp[i]) + 1;
    str = envz_entry(*envp, e_len, "HOME");
    printf("%s\n", str);
    str = envz_get(*envp, e_len, "HOME");
    printf("%s\n", str);
    exit(EXIT_SUCCESS);
}