Доступ к переменным среды В C ++
-
08-07-2019 - |
Вопрос
Я хотел бы иметь доступ к $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 ++?Есть ли какие-либо проблемы, с которыми я, вероятно, столкнусь, которых я мог бы избежать, обладая некоторыми знаниями?
Решение
Нет ничего плохого в использовании getenv()
в C ++. Он определяется stdlib.h
, или, если вы предпочитаете стандартную реализацию библиотеки, вы можете включить cstdlib
и получить доступ к функции через пространство имен std::
(т.е. std::getenv()
). Абсолютно ничего плохого в этом нет. На самом деле, если вас беспокоит переносимость, предпочтительна любая из этих двух версий.
Если вы не обеспокоены переносимостью и используете управляемый C ++, вы можете использовать эквивалент .NET - System::Environment::GetEnvironmentVariable()
. Если вы хотите не эквивалентный .NET для Windows, вы можете просто использовать GetEnvironmentVariable()
Win32.
Другие советы
Я бы просто немного переработал код:
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 ( Переменная среда)
- В других системах на базе Linux / unix используется getenv
Зачем использовать GetEnvironmentVariable в Windows, из MSDN getenv:
getenv работает только с данными структурами, доступными во время выполнения библиотекой, а не со средой "сегмент", созданный для процесса операционной системой.Следовательно, программы, использующие аргумент envp для main или wmain, могут извлекать неверную информацию.
Эта функция может извлекать либо системную переменную среды , либо пользовательскую переменную среды.
В c ++ вы должны использовать std :: getenv и #include <cstdlib>