ProgramingTip

C ++에서 환경 변수에 액세스

bestdevel 2020. 11. 24. 18:52
반응형

C ++에서 환경 변수에 액세스


$HOME작성중인 C ++ 프로그램 환경 변수에 액세스하고 싶습니다 . C로 코드를 작성하는 경우 getenv()함수를 사용하고 싶었지만 더 나은 방법이 있는지 궁금합니다. 지금까지 가지고있는 코드는 다음과 가변합니다.

std::string get_env_var( std::string const & key ) {                                 
    char * val;                                                                        
    val = getenv( key.c_str() );                                                       
    std::string retval = "";                                                           
    if (val != NULL) {                                                                 
        retval = val;                                                                    
    }                                                                                  
    return retval;                                                                        
}           

getenv()C ++ Environmental & 변수에에서 액세스 하는 사용해야합니까 ? 약간의 지식으로 피할 수있는 문제가 있습니까?


getenv()C ++에서 사용하는 데 많은 문제가 없습니다 . 의해 정의에 stdlib.h되거나 표준 라이브러리 구현을 선호하는 경우 네임 스페이스 (예 : cstdlib를 통해 함수를 포함 하고 액세스 할 수 있습니다 . 이것에 절대적으로 잘못된 것은 없습니다. 사실 이식성이 걱정이 두 버전 중 하나를 선호합니다.std::std::getenv()

이 경우 당신 되지 이동성에 대해 우려하고 C 관리 사용하는 ++, 당신은 .NET 동등한를 사용할 수 있습니다 - . .NET이 아닌 Windows 용을 원하면 Win32 함수 를 사용하면 됩니다.System::Environment::GetEnvironmentVariable()GetEnvironmentVariable()


코드를 조금 리팩토링하겠습니다.

std::string getEnvVar( std::string const & key ) const
{
    char * val = getenv( key.c_str() );
    return val == NULL ? std::string("") : std::string(val);
}

  • Windows를 사용하는 경우 Win32 API GetEnvironmentVariable을 사용할 수 있습니다.
  • 다른 리눅스 / 유닉스 기반 시스템에서는 getenv를 사용하십시오.

Windows 에서 MSDN getenv의 GetEnvironmentVariable을 사용하는 이유 :

getenv는 작동 라이브러리에 액세스 할 수있는 데이터 구조에서 작동하며 운영 환경에서 프로세스를 위해 작동하며 "세그먼트"에서는 작동하지 않습니다. 따라서 main 또는 wmain에 envp 인수를 사용하는 프로그램은 잘못된 정보를 검색 할 수 있습니다.

그리고 MSDN GetEnvironment에서 :

이 함수는 시스템 환경 변수 또는 사용자 환경 변수를 검색 할 수 있습니다.


C ++에서는 std :: getenv를 사용합니다. #include <cstdlib>

참고 URL : https://stackoverflow.com/questions/631664/accessing-environment-variables-in-c

반응형