Как получить переменные системной среды с помощью библиотеки boost?

Я работаю на Windows и MacOS, я хотел бы получить переменные среды. Как получить переменные системной среды с помощью библиотеки boost?

Есть ли эквивалент System.Environment.GetEnvironmentVariable() из .Net?


person Arman    schedule 13.01.2012    source источник


Ответы (2)


Нет необходимости в Boost. Используйте std::getenv из <cstdlib>, что является стандартной функцией C++.

person Fred Foo    schedule 13.01.2012
comment
Кажется, в boost нет переносимых системных переменных среды. FileSystem имеет переносимые имена файлов, но переменные среды не переносимы: Win7 имеет HOMEPATH, а *NIX имеет HOME, то же самое для USERNAME и USER. - person Arman; 13.01.2012
comment
@Arman: поиск переносимого домашнего каталога относительно бесполезен, поскольку в Windows и Unix очень разные соглашения относительно того, где должны храниться пользовательские данные. - person Fred Foo; 13.01.2012
comment
Да, я согласен, но для хранения общих параметров программы полезно иметь некоторые соглашения: в Linux обычно пользовательские программы хранят $HOME/.myset или окна, возможно, %userprofile%/.myset или что-то подобное. Поэтому лучше иметь портативные функции. - person Arman; 13.01.2012
comment
@Arman: вы можете определить функцию get_home, которая возвращает $HOME, если она установлена, $HOMEPATH в противном случае. - person Fred Foo; 13.01.2012
comment
Проблема в том, что std::getenv не является потокобезопасным, и, похоже, не существует std::dupenv. - person snips-n-snails; 07.11.2014
comment
@traal: это проблема только в том случае, если вы вызываете setenv из другого потока, верно? И иметь потоки, взаимодействующие через среду процесса, мне не кажется хорошей идеей... - person Fred Foo; 07.11.2014
comment
std::getenv не является ни реентерабельным, ни потокобезопасным. Не лучший выбор. stackoverflow.com/questions/4286934/ - person Kevin; 13.09.2016
comment
C++ 11 — в отличие от более ранних стандартных версий — гарантирует, что std::getenv() является потокобезопасным, если одновременно не вносятся изменения в среду — см. en.cppreference.com/w/cpp/utility/program/getenv . - person YitzikC; 07.02.2017
comment
Что касается переносимого хранения пользовательских параметров, вам, вероятно, следует использовать библиотеку более высокого уровня, которая обеспечивает такую ​​​​функциональность через независимые от платформы абстракции, такие как wxwidgets. - person YitzikC; 07.02.2017

Вероятно, вам нужна простая функция c++) getenv(), она не обязательно должна быть усиленный.

person Michael Krelin - hacker    schedule 13.01.2012