如何在ac/c ++ app中列出所有环境变量

dB'*_*dB' 7 c c++ macos terminal environment-variables

我知道在用c ++编程时我可以用getenv.访问各个环境变量.

我也知道,在os x终端中,我可以使用列出所有当前环境变量env.

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

Sha*_*our 13

您可以使用非可移植的envp参数main:

int main(int argc,char* argv[], char** envp)
Run Code Online (Sandbox Code Playgroud)

作为一个奖励显然OSX你有苹果,它为您提供其他操作系统提供的信息:

int main(int argc, char **argv, char **envp, char **apple)
Run Code Online (Sandbox Code Playgroud)

但它用于什么?好吧,Apple可以使用apple vector将任何"隐藏"参数传递给任何程序.他们确实也使用它.目前,apple [0]包含在磁盘上找到执行二进制文件的路径.你说的是什么?apple [0]与argv [0]有什么不同?不同之处在于,当调用execve(2)时,argv [0]可以设置为任意值.例如,shell通常通过启动登录shell来区分登录shell和常规shell,其中argv [0]中的第一个字符是 -


ick*_*fay 12

使用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;
}
Run Code Online (Sandbox Code Playgroud)