Как перечислить все переменные среды в приложении c / C++
Я знаю, что при программировании на c++ я могу получить доступ к отдельным переменным среды с getenv
.
Я также знаю, что в терминале os x я могу перечислить все текущие переменные среды, используя env
.
мне интересно получить полный список переменных среды, доступных для моей запущенной программы на c++. Есть ли функция c/C++, которая будет их перечислять? Другими словами, есть ли способ вызвать env
из моего кода на c++?
3 ответов
использовать environ
глобальная переменная. Это указатель с нулевым завершением на массив строк в формате name=value
. Вот миниатюрный клон env
:
#include <stdlib.h>
#include <stdio.h>
extern char **environ;
int main(int argc, char **argv) {
for(char **current = environ; *current; current++) {
puts(*current);
}
return EXIT_SUCCESS;
}
вы можете использовать не-портативный параметре envp до main
:
int main(int argc,char* argv[], char** envp)
и в качестве бонуса, видимо, на OSX
вы яблоко что дает вам другую информацию о поставляемой ОС:
int main(int argc, char **argv, char **envp, char **apple)
но для чего он используется? Ну, Apple может использовать вектор apple для передачи любых "скрытых" параметров в любую программу. И они действительно используют его. В настоящее время apple[0] содержит путь, по которому был выполнен двоичный файл нашел на диске. Что ты сказал? Чем apple[0] отличается от argv [0]? Разница в том, что argv[0] может быть задано любое произвольное значение при вызове execve(2). Например, оболочки часто отличают оболочку входа от обычной оболочки, запуская оболочки входа с первым символом в argv[0], являющимся -
упс, я забыл, что system
позволяет выполнять команды терминала.
этот фрагмент дает мне то, что мне нужно:
std::cout << "List of environment variables: << std::endl;
system("env");