PUTENV(3)

НАЗВАНИЕ
putenv - добавляет или изменяет переменную окружения

СИНТАКСИС
#include <stdlib.h>

int putenv(char *string);

ОПИСАНИЕ
Функция putenv() изменяет значение переменной окружения или добавляет к ней новое. Аргумент string должен быть представлен в форме name=value. Если name не присутствует в списке переменных окружения, то string добавляется к окружению. Если name уже существует, то величина переменной name изменяется на value. Строка, на которую указывает string, становится частью окружения, так что ее изменение приведет к изменению окружения.

ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
Функция putenv() возвращает 0, если завершила работу корректно, или -1 при ошибках.

НАЙДЕННЫЕ ОШИБКИ

ENOMEM
    - недостаточно пространства для расширения окружения.

ЗАМЕЧАНИЯ
Функция putenv() требует повторного ее использования в libc4, libc5 и glibc2.0, но оно не требуется в glibc2.1.

Описание для libc4, libc5, glibc: если аргумент string имеет форму name и не содержит символ `=', то переменная name изымается из окружения. Если putenv() выделяет новый массив environ и предыдущий массив также был выделен в putenv(), то данный массив будет освобожден. В любом случае, прежнее пространство, ассоциированное с переменными окружения, не будет освобождено.

Версии для libc4, libc5 и glibc 2.1.2 соответствуют SUSv2: используется указатель string, передаваемый putenv(). Строка, например, становится частью окружения; последующее ее изменение приводит к изменению окружения. Таким образом, ошибочным будет вызывать putenv() с автоматической переменной в качестве аргумента, т.к. после возврата из вызываемой функции строка string по-прежнему останется частью окружения. Однако, версии glibc 2.0-2.1.1 работают по-другому: используется копия строки. С одной стороны, это вызывает утечку памяти, с другой стороны, это не соответствует SUSv2. Эта ошибка исправлена в glibc2.1.2.

Версия BSD4.4, как и glibc 2.0, использует копию строки.

SUSv2 удаляет `const' из прототипа (что также реализовано в glibc 2.1.3).

СООТВЕТСТВИЕ СТАНДАРТАМ
SVID 3, POSIX, BSD 4.3

СМ. ТАКЖЕ
getenv(3), setenv(3), unsetenv(3), environ(5)