Spec-Zone.ru › C

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API