putenv()

Добавить или изменить переменную окружения

Прототип:

#include <stdlib.h>
int putenv( char *env_name );

Аргументы:

env_name
Имя переменной окружения и изменения с ней.

Библиотека:

libc

Описание:

Функция putenv() использует env_name в форме имя=значение для установки переменной окружения с именем name в значение value. Функция изменяет значение переменной name или создает новую.

В любом случае env_name становится частью окружения; последующие модификации строки env_name влияют на окружение.

Память, доступная для имен переменных окружения и их значений ограничено. Отсюда, putenv() может завершится с ошибкой.


Note: Если env_name не является константой, следует сделать дубль строки, поскольку putenv() не делает ее копию. Пример:

putenv( strdup( buffer ) );


Возвращаемое значение:

0
Успешное завершение.
-1
Возникла ошибка. Код ошибки записан в errno.

Коды ошибок:

ENOMEM
Недостаточно памяти для расширения окружения процесса.

Примеры:

Получение ассоциированной с INCLUDE строки и вывод ее на печать, назначение нового значения переменной окружения и повторение вывода. Удаление переменной INCLUDE из окружения.

#include <stdio.h>
#include <stdlib.h>
int main( void )
{
char *path = getenv( "INCLUDE" );
if ( path != NULL )
{
printf( "INCLUDE=%s\n", path );
}
if ( putenv( "INCLUDE=/src/include" ) != 0 )
{
printf( "putenv() failed setting INCLUDE\n" );
return (EXIT_FAILURE);
}
path = getenv( "INCLUDE" );
if ( path != NULL )
{
printf( "INCLUDE=%s\n", path );
}
unsetenv( "INCLUDE" );
return (EXIT_SUCCESS);
}

Код генерирует следующий вывод:

$ ./a.out INCLUDE=/usr/nto/include INCLUDE=/src/include

Классификация:

POSIX 1003.1 XSI

Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Нет
В потоке
Нет

Предостережения:

Никогда не используйте putenv() с автоматическими переменными.

Функция putenv() изменяет память, ассоциированную с окружением процесса, на которое указывает глобальная переменная environ.

Тематические ссылки:

clearenv(), environ, errno, getenv(), setenv(), unsetenv()




Предыдущий раздел: Описание API системной библиотеки