Функция 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).