10

我知道在使用 c++ 编程时,我可以使用getenv.

我也知道,在 os x 终端中,我可以使用env.

我有兴趣获得可用于我正在运行的 c++ 程序的环境变量的完整列表。是否有 ac/c++ 函数可以列出它们?换句话说,有没有办法env从我的 c++ 代码中调用?

4

3 回答 3

14

使用environ全局变量。它是一个以 null 结尾的指针,指向格式为 的字符串数组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;
}
于 2013-05-27T02:25:21.267 回答
13

您可以使用不可移植的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] 有何不同?不同之处在于调用 execve(2) 时 argv[0] 可以设置为任意值。例如,shell 通常通过以 argv[0] 中的第一个字符为 - 的方式启动登录 shell,从而将登录 shell 与常规 shell 区分开来。

于 2013-05-27T02:20:57.117 回答
0

哎呀,我忘了它可以system让你执行终端命令。

这个片段给了我我需要的东西:

std::cout << "List of environment variables: << std::endl;
system("env");
于 2013-05-27T02:23:43.233 回答