C++ MAC OS有类似于wenviron的东西吗?
我正在尝试做的是创建一个包含系统中存在的所有环境变量的表。我的解决方案适用于windows和char环境变量(使用environ),但不适用于Mac 这就是我目前的解决方案:C++ MAC OS有类似于wenviron的东西吗?,c++,macos,C++,Macos,我正在尝试做的是创建一个包含系统中存在的所有环境变量的表。我的解决方案适用于windows和char环境变量(使用environ),但不适用于Mac 这就是我目前的解决方案: template<> char** GetEnviron(void) { return environ; } template<> wchar_t** GetEnviron(void) { return _wenviron; } T* pEnvVarPair = *GetEnvi
template<>
char** GetEnviron(void)
{
return environ;
}
template<>
wchar_t** GetEnviron(void)
{
return _wenviron;
}
T* pEnvVarPair = *GetEnviron<T*>();
for (int idx = 1; pEnvVarPair; idx++)
{
...
pEnvVarPair = *(GetEnviron<T*>() + idx);
};
它位于ifdef#ifdef(ifdef)CRT(使用)WINAPI(家庭)桌面(应用)下
Mac有类似的功能吗
我是否遗漏了一些明显的内容?main的第三个参数是一个env变量数组。这将转储环境:
#include <iostream>
int main(int argc, char **argv, char **env) {
for (int i=0; env[i]!= NULL; i++) {
std::cout << env[i] << std::endl;
}
return 0;
}
运行输出:
$ ./env
NDK=/Users/spartygw/android-ndk
SSH_AGENT_PID=18108
TERM_PROGRAM=Apple_Terminal
ANDROID_HOME=/Users/spartygw/Library/Android/sdk
TERM=xterm-256color
SHELL=/bin/bash
CLICOLOR=1
TMPDIR=/var/folders/97/hlbrfp294kdbf182909shsqw0000gn/T/
GRADLE_HOME=/Users/spartygw/bin/gradle
TERM_PROGRAM_VERSION=433
CVSROOT=gwarren@vpdsec.net:/home/cvs/virnetx
TERM_SESSION_ID=EC6955BE-1149-4A56-8C3E-3C86B315048E
USER=spartygw
NDKROOT=/Users/spartygw/android-ndk
SSH_AUTH_SOCK=/var/folders/97/hlbrfp294kdbf182909shsqw0000gn/T//sshg8KJIbhlLFRt/agent.18106
__CF_USER_TEXT_ENCODING=0x1F5:0x0:0x0
color_prompt=yes
PATH=/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Users/spartygw/bin/gradle/bin:/Users/spartygw/bin
PWD=/tmp
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/
LANG=en_US.UTF-8
XPC_FLAGS=0x0
XPC_SERVICE_NAME=0
HOME=/Users/spartygw
SHLVL=2
CVS_RSH=ssh
DISPLAY=/private/tmp/com.apple.launchd.ZKUZySdPF2/org.macosforge.xquartz:0
如果出于某种原因您不想在main
中捕获它,您可以通过全局varenviron
访问它。例如:
#include <iostream>
extern char **environ;
void dump_env() {
for(char **var = environ; *var; var++) {
std::cout << *var << std::endl;
}
}
int main(int argc, char **argv) {
dump_env();
return 0;
}
#包括
外部字符**环境;
void dump_env(){
对于(char**var=environ;*var;var++){
std::coutmain
的第三个参数是一个环境变量数组。这将转储环境:
#include <iostream>
int main(int argc, char **argv, char **env) {
for (int i=0; env[i]!= NULL; i++) {
std::cout << env[i] << std::endl;
}
return 0;
}
运行输出:
$ ./env
NDK=/Users/spartygw/android-ndk
SSH_AGENT_PID=18108
TERM_PROGRAM=Apple_Terminal
ANDROID_HOME=/Users/spartygw/Library/Android/sdk
TERM=xterm-256color
SHELL=/bin/bash
CLICOLOR=1
TMPDIR=/var/folders/97/hlbrfp294kdbf182909shsqw0000gn/T/
GRADLE_HOME=/Users/spartygw/bin/gradle
TERM_PROGRAM_VERSION=433
CVSROOT=gwarren@vpdsec.net:/home/cvs/virnetx
TERM_SESSION_ID=EC6955BE-1149-4A56-8C3E-3C86B315048E
USER=spartygw
NDKROOT=/Users/spartygw/android-ndk
SSH_AUTH_SOCK=/var/folders/97/hlbrfp294kdbf182909shsqw0000gn/T//sshg8KJIbhlLFRt/agent.18106
__CF_USER_TEXT_ENCODING=0x1F5:0x0:0x0
color_prompt=yes
PATH=/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Users/spartygw/bin/gradle/bin:/Users/spartygw/bin
PWD=/tmp
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/
LANG=en_US.UTF-8
XPC_FLAGS=0x0
XPC_SERVICE_NAME=0
HOME=/Users/spartygw
SHLVL=2
CVS_RSH=ssh
DISPLAY=/private/tmp/com.apple.launchd.ZKUZySdPF2/org.macosforge.xquartz:0
如果出于某种原因您不想在main
中捕获它,您可以通过全局varenviron
访问它。例如:
#include <iostream>
extern char **environ;
void dump_env() {
for(char **var = environ; *var; var++) {
std::cout << *var << std::endl;
}
}
int main(int argc, char **argv) {
dump_env();
return 0;
}
#包括
外部字符**环境;
void dump_env(){
对于(char**var=environ;*var;var++){
std::我想OP是不是在寻找一个与外部wchar\u t**\u wenviron;
等价的东西(注意类型)我不认为macOS上有这样的事情。@rustyx不,这不是重复的,因为这是关于wchat_t变量的,特别是现有问题没有涉及的变量。请撤消关闭问题。好的,我明白了。不,POSIX系统上没有wenviron。但是环境
应该用UTF-8正确编码。@rustyx我明白了…谢谢!Ar你知道main的第三个参数是一个env vars数组吗?我想OP正在寻找一个与extern wchar\u t**\u wenviron;
(注意类型)我不认为macOS上有这样的事情。@rustyx不,这不是重复的,因为这是关于wchat_t变量的,特别是现有问题没有涉及的变量。请撤消关闭问题。好的,我明白了。不,POSIX系统上没有wenviron。但是环境
应该用UTF-8正确编码。@rustyx我明白了…谢谢!Ar你知道main的第三个参数是一个env vars数组吗?谢谢你提供的信息,我实际上不知道,但是我想知道wchar\u t*不是char*。我可以从**环境系统变量中获取char*形式的环境变量。在Windows上,有一个单独的变量**wenviron用于此目的,而Mac上不存在(至少我还没找到——也许是我太蠢了)所以我想知道Mac的机制是什么是的,我更新了我的答案。你可以在任何地方获得environ
数组。它总是一个字符**谢谢你提供的信息,我实际上并不知道,但是我想知道的是wchar\u t*不是char*。我可以从**environ系统变量中获得环境变量作为char*。在Windows有一个单独的变量**\u wenviron在Mac上不存在(至少我没有找到它-可能是我太笨了),所以我想知道Mac的机制是什么是的,我更新了我的答案。你可以在任何地方得到环境
数组。它总是一个字符**