다음을 통해 공유


getenv_s, _wgetenv_s

현재 환경에서 값을 가져옵니다. 이러한 버전의 getenv, _wgetenv에는 CRT의 보안 기능에 설명된 대로 보안 향상 기능이 포함됩니다.

중요

이 API는 Windows 런타임에서 실행되는 응용 프로그램에서 사용할 수 없습니다.자세한 내용은 /ZW에서 지원하지 않는 CRT 함수를 참조하십시오.

errno_t getenv_s( 
   size_t *pReturnValue,
   char* buffer,
   size_t numberOfElements,
   const char *varname 
);
errno_t _wgetenv_s( 
   size_t *pReturnValue,
   wchar_t *buffer,
   size_t numberOfElements,
   const wchar_t *varname 
);
template <size_t size>
errno_t getenv_s( 
   size_t *pReturnValue,
   char (&buffer)[size],
   const char *varname 
); // C++ only
template <size_t size>
errno_t _wgetenv_s( 
   size_t *pReturnValue,
   wchar_t (&buffer)[size],
   const wchar_t *varname 
); // C++ only

매개 변수

  • pReturnValue
    만일 필요한 버퍼 크기나 그 변수를 찾을 수 없으면, 0을 반환합니다.

  • buffer
    환경 변수의 값으로 저장하는 버퍼입니다.

  • numberOfElements
    이 buffer의 크기.

  • varname
    환경 변수명

반환 값

성공 시 0입니다; 그렇지 않으면, 실패 시 오류 코드가 됩니다.

오류 조건

pReturnValue

buffer

numberOfElements

varname

반환 값

NULL

any

any

any

EINVAL

any

NULL

>0

any

EINVAL

any

any

any

NULL

EINVAL

이들 오류 조건은 매개 변수 유효성 검사 에 설명된대로 잘못된 매개 변수 처리기를 호출합니다. 계속해서 실행하도록 허용된 경우, 이 함수는 errno 를 EINVAL 로 설정하고 EINVAL을 반환합니다.

또한, 버퍼가 너무 작은 경우, 이 함수는 ERANGE를 반환합니다. 잘못된 매개 변수 처리기를 호출 하지 않습니다. pReturnValue 에서 필요한 버퍼 사이즈를 작성함으로써, 보다 큰 버퍼를 사용하여 다시 함수를 호출하도록 프로그램을 사용 할 수 있습니다.

설명

getenv_s 함수는 varname 에 대한 환경 변수 목록을 검색합니다. getenv_s 는 Windows 운영 체제에서 대/소문자가 구분 되지 않습니다. getenv_s 와 _putenv_s 는 환경에 접근하기 위한 전역 변수 _environ 에 의해 지정된 환경 복사본을 사용합니다. getenv_s 는 운영체제에 의해 프로세스를 만드는 환경 "세그먼트"가 아닌 런타임 라이브러리에 접근할 수 있는 데이터 구조에서만 작동합니다. 따라서 프로그램은 envp 인수를 사용합니다. main 또는 wmain 은 잘못된 정보를 검색할 수 있습니다.

_wgetenv_s 는 getenv_s 의 와이드 문자 버전입니다. _wgetenv_s 인수와 반환 값은 와이드 문자 문자열입니다. _wenviron 전역 변수는 와이드 문자 버전인 _environ입니다.

MBCS 프로그램 (예를 들어, ASCII SBCS 프로그램에서) _wenviron 는 원래 NULL 입니다. 환경에서 멀티 바이트 문자 문자열 구성 되어 있기 때문입니다. _wputenv를 처음 호출할 때 또는 MBCS 환경이 이미 있는 경우에는 _wgetenv_s 를 처음 호출할 때 해당 와이드 문자열 환경이 만들어지고 _wenviron에 의해 가르켜집니다.

유니코드와 유사한 ((_wmain) 프로그램인, _environ 는 원래 NULL 입니다. 와이드 문자열 환경이 구성 되어 있기 때문입니다. _putenv를 처음 호출할 때 또는 MBCS 환경이 이미 있는 경우에는 getenv_s 를 처음 호출할 때 해당 와이드 문자열 환경이 만들어지고, _environ에 의해 가르켜집니다.

환경 프로그램의 두개 복사본(MBCS와 유니코드)이 프로그램에서 동시에 존재할 때, 실행 시간을 더 늦춘 결과로서, 런타임 시스템은 두개의 복사본을 유지해야만 합니다. 예를 들어, _putenv 이 호출될 때마다, _wputenv 호출은 또한 자동으로 실행됩니다, 따라서 두개의 환경 문자열은 반응하게됩니다.

경고

경우에 따라서 런타임 시스템 유니코드 버전 및 환경, 멀티 바이트 버전을 모두 유지 관리 하는 경우 이러한 두 환경 버전은 정확하게 반응하지 않습니다.멀티 바이트문자 문자열에 대한 고유 유니코드 문자열 매핑은 유일 하지 않기 때문에, 고유 유니코드 문자열로부터 매핑이 필수적인 것은 아닙니다.자세한 내용은 _environ, _wenviron을 참조하십시오.

참고

_putenv_s_getenv_s 함수 패밀리는 스레드로부터 안전 하지 않습니다._putenv_s 는 임의 오류가 발생하여 문자열을 수정하는 동안, _getenv_s 는 문자열 포인터를 반환합니다.이러한 함수에 대한 호출은 동기화해야 합니다.

C++에서, 이러한 함수를 사용하는 것은 템플릿 오버로드에 의해 단순화됩니다. 오버로드는 자동으로 버퍼의 길이를 추정할 수 있고, 크기 인수를 지정할 필요를 없앱니다. 자세한 내용은 안전한 템플릿 오버로드을 참조하십시오.

제네릭 텍스트 라우팅 매핑

TCHAR.H 루틴

_UNICODE &및 _MBCS 정의되지 않음

_MBCS 정의됨

_UNICODE 정의됨

_tgetenv_s

getenv_s

getenv_s

_wgetenv_s

이 TZ 환경 변수의 값을 바꾸거나 확인하기 위하여, getenv_s, _putenv 및 _tzset 필요에 따라 사용합니다. TZ에 대한 자세한 내용은 _tzset_daylight, _dstbias, _timezone 및 _tzname을 참조하십시오.

요구 사항

루틴

필수 헤더

getenv_s

<stdlib.h>

_wgetenv_s

<stdlib.h> 또는 <wchar.h>

호환성에 대한 자세한 내용은 호환성을 참조하십시오.

예제

// crt_getenv_s.c
// This program uses getenv_s to retrieve
// the LIB environment variable and then uses
// _putenv to change it to a new value.
 
#include <stdlib.h>
#include <stdio.h>

int main( void )
{
   char* libvar;
   size_t requiredSize;

   getenv_s( &requiredSize, NULL, 0, "LIB");
   if (requiredSize == 0)
   {
      printf("LIB doesn't exist!\n");
      exit(1);
   }

   libvar = (char*) malloc(requiredSize * sizeof(char));
   if (!libvar)
   {
      printf("Failed to allocate memory!\n");
      exit(1);
   }

   // Get the value of the LIB environment variable.
   getenv_s( &requiredSize, libvar, requiredSize, "LIB" );

   printf( "Original LIB variable is: %s\n", libvar );

   // Attempt to change path. Note that this only affects
   // the environment variable of the current process. The command
   // processor's environment is not changed.
   _putenv_s( "LIB", "c:\\mylib;c:\\yourlib" );

   getenv_s( &requiredSize, NULL, 0, "LIB");

   libvar = (char*) realloc(libvar, requiredSize * sizeof(char));
   if (!libvar)
   {
      printf("Failed to allocate memory!\n");
      exit(1);
   }

   // Get the new value of the LIB environment variable. 
   getenv_s( &requiredSize, libvar, requiredSize, "LIB" );

   printf( "New LIB variable is: %s\n", libvar );

   free(libvar);
}
  

해당 .NET Framework 항목

System.Environment::GetEnvironmentVariables

참고 항목

참조

프로세스 및 환경 제어

환경 상수

_putenv, _wputenv

_dupenv_s, _wdupenv_s