getenv, getenv_s
Defined in header <stdlib.h> |
||
|---|---|---|
char *getenv( const char *name ); |
(1) | |
errno_t getenv_s( size_t *restrict len, char *restrict value,
rsize_t valuesz, const char *restrict name );
|
(2) | (since C11) |
1) Ищет переменную среды с именем
name в списке сред, указанном хостом, и возвращает указатель на строку, связанную с соответствующей переменной среды. Набор переменных среды и способы их изменения определяются реализацией.
Эта функция не обязана быть потокобезопасной. Другой вызов
getenv, а также вызовы функций POSIX setenv(), unsetenv() и putenv() могут сделать недействительным указатель, возвращённый предыдущим вызовом, или изменить строку, полученную при предыдущем вызове.
Изменение строки, возвращённой
getenv, приводит к неопределённому поведению.
2) Аналогично (1), за исключением того, что значения переменной среды записываются в предоставленный пользователем буфер
value (если он не равен null), а количество записанных байтов сохраняется в предоставленном пользователем месте *len (если оно не равно null). Если переменная среды не задана в среде, ноль записывается в *len (если оно не равно null), а '\0' записывается в value[0] (если оно не равно null). Кроме того, следующие ошибки обнаруживаются во время выполнения и вызывают функцию обработчика ограничений, установленную в данный момент: -
-
nameявляется указателем на null -
valueszбольше, чемRSIZE_MAX -
valueявляется указателем на null, иvalueszне равно нулю
-
- Как и во всех функциях с проверкой границ,
getenv_sгарантируется доступным только в том случае, если__STDC_LIB_EXT1__определено реализацией, и если пользователь определяет__STDC_WANT_LIB_EXT1__как целочисленную константу1перед включением<stdlib.h>.
Параметры
| name | - | строка символов с нулевым завершением, идентифицирующая имя переменной среды для поиска |
| len | - | указатель на предоставленное пользователем место, где getenv_s сохранит длину переменной среды |
| value | - | указатель на предоставленный пользователем массив символов, где getenv_s сохранит содержимое переменной среды |
| valuesz | - | максимальное количество символов, которое getenv_s разрешено записать в dest (размер буфера) |
Возвращаемое значение
1) строка символов, идентифицирующая значение переменной среды, или указатель на null, если такая переменная не найдена.
2) ноль, если переменная среды была найдена, ненулевое значение, если она не была найдена или произошла ошибка проверки ограничений во время выполнения. При любой ошибке записывается ноль в
*len (если len не является указателем на null).
Примечания
В системах POSIX переменные среды также доступны через глобальную переменную environ, объявленную как extern char **environ; в <unistd.h>, и через необязательный третий аргумент envp, функции главной функции.
Вызов getenv_s с указателем на null для value и нулём для valuesz используется для определения размера буфера, необходимого для хранения всего результата.
Пример
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
const char *name = "PATH";
const char *env_p = getenv(name);
if (env_p)
printf("Your %s is %s\n", name, env_p);
}Возможный вывод:
Your PATH is /home/gamer/.local/bin:/usr/local/bin:/usr/bin:/bin:/usr/share/games
Ссылки
- Стандарт C23 (ISO/IEC 9899:2023):
- 7.22.4.6 Функция getenv (стр. TBD)
- K.3.6.2.1 Функция getenv_s (стр. TBD)
- Стандарт C17 (ISO/IEC 9899:2018):
- 7.22.4.6 Функция getenv (стр. 256-257)
- K.3.6.2.1 Функция getenv_s (стр. 440-441)
- Стандарт C11 (ISO/IEC 9899:2011):
- 7.22.4.6 Функция getenv (стр. 352-353)
- K.3.6.2.1 Функция getenv_s (стр. 606-607)
- Стандарт C99 (ISO/IEC 9899:1999):
- 7.20.4.5 Функция getenv (стр. 317)
- Стандарт C89/C90 (ISO/IEC 9899:1990):
- 4.10.4.4 Функция getenv
См. также
Документация C++ для getenv |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/program/getenv