Как перечислить все переменные среды в приложении 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");