Namespaces
Variants

getenv, getenv_s

From cppreference.net
헤더 파일에 정의됨 <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) (C11부터)
1) 호스트 지정 환경 목록에서 name 이름을 가진 환경 변수를 검색하고, 일치하는 환경 변수와 연결된 문자열에 대한 포인터를 반환합니다. 환경 변수 집합과 이를 변경하는 방법은 구현에 따라 정의됩니다.
이 함수는 스레드 안전성을 요구하지 않습니다. getenv 에 대한 다른 호출이나 POSIX 함수인 setenv() , unsetenv() , 그리고 putenv() 에 대한 호출은 이전 호출에서 반환된 포인터를 무효화하거나 이전 호출로부터 얻은 문자열을 수정할 수 있습니다.
getenv 가 반환하는 문자열을 수정하는 것은 정의되지 않은 동작을 유발합니다.
2) (1) 과 동일하지만, 환경 변수의 값이 사용자가 제공한 버퍼 value (null이 아닌 경우)에 기록되고, 기록된 바이트 수는 사용자가 제공한 위치 * len (null이 아닌 경우)에 저장됩니다. 환경 변수가 환경에 설정되어 있지 않은 경우, * len (null이 아닌 경우)에 0이 기록되고 ' \0 ' value [ 0 ] (null이 아닌 경우)에 기록됩니다. 또한 런타임에 다음 오류들이 감지되면 현재 설치된 제약 처리기 함수를 호출합니다:
  • name 이 null 포인터인 경우
  • valuesz RSIZE_MAX 보다 큰 경우
  • value 가 null 포인터이고 valuesz 가 0이 아닌 경우
모든 경계 검사 함수와 마찬가지로, getenv_s 는 구현에 의해 __STDC_LIB_EXT1__ 가 정의되고 사용자가 __STDC_WANT_LIB_EXT1__ 를 정수 상수 1 으로 정의한 경우에만 사용 가능함이 보장됩니다 <stdlib.h> 를 포함하기 전에.

목차

매개변수

name - 검색할 환경 변수의 이름을 식별하는 null 종료 문자열
len - getenv_s 가 환경 변수의 길이를 저장할 사용자 제공 위치에 대한 포인터
value - getenv_s 가 환경 변수의 내용을 저장할 사용자 제공 문자 배열에 대한 포인터
valuesz - getenv_s dest 에 기록할 수 있는 최대 문자 수 (버퍼의 크기)

반환값

1) 환경 변수의 값을 식별하는 문자열 또는 해당 변수가 발견되지 않으면 null 포인터입니다.
2) 환경 변수를 찾은 경우 0을 반환하고, 환경 변수를 찾지 못했거나 런타임 제약 조건 위반이 발생한 경우 0이 아닌 값을 반환합니다. 모든 오류 발생 시, * len 에 0을 기록합니다 len 이 null 포인터가 아닌 경우).

참고 사항

POSIX 시스템에서 환경 변수 는 전역 변수 environ 를 통해서도 접근할 수 있으며, 이는 extern char ** environ ; <unistd.h> 에 선언되어 있습니다. 또한 main 함수 의 선택적 세 번째 인수인 envp 를 통해서도 접근 가능합니다.

getenv_s 호출에서 value 에 null 포인터를, valuesz 에 0을 지정하면 전체 결과를 보관하는 데 필요한 버퍼 크기를 확인하는 데 사용됩니다.

예제

#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:2024):
  • 7.22.4.6 getenv 함수 (p: TBD)
  • K.3.6.2.1 getenv_s 함수 (p: TBD)
  • C17 표준(ISO/IEC 9899:2018):
  • 7.22.4.6 getenv 함수 (p: 256-257)
  • K.3.6.2.1 getenv_s 함수 (p: 440-441)
  • C11 표준 (ISO/IEC 9899:2011):
  • 7.22.4.6 getenv 함수 (p: 352-353)
  • K.3.6.2.1 getenv_s 함수 (p: 606-607)
  • C99 표준 (ISO/IEC 9899:1999):
  • 7.20.4.5 getenv 함수 (p: 317)
  • C89/C90 표준 (ISO/IEC 9899:1990):
  • 4.10.4.4 getenv 함수

참고 항목

C++ 문서 에 대한 getenv