私は、C++でプログラミングするとき、getenv
で個々の環境変数にアクセスできることを知っています。c/C++ app内のすべての環境変数をリストする方法
os x端末では、env
を使用して、現在の環境変数をすべてリストすることもできます。
実行中のC++プログラムで使用できる環境変数の完全なリストを取得することに興味があります。それらをリストするc/C++関数はありますか?言い換えれば、私のC++コードからenv
を呼び出す方法はありますか?
私は、C++でプログラミングするとき、getenv
で個々の環境変数にアクセスできることを知っています。c/C++ app内のすべての環境変数をリストする方法
os x端末では、env
を使用して、現在の環境変数をすべてリストすることもできます。
実行中のC++プログラムで使用できる環境変数の完全なリストを取得することに興味があります。それらをリストするc/C++関数はありますか?言い換えれば、私のC++コードからenv
を呼び出す方法はありますか?
は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;
}
確かに。 'man getenv'は、' environ(7) 'を記述する' SEE ALSO'セクションの底部にあります(OS Xでは、OPが言及しています)。そこで、 'man environ'はこれを説明するマンページを提供します。 'apropos environment'にはこのページも含まれています。これはRTFMを意味するものではありませんが、マンページの 'SEE ALSO'セクションがチェックする価値があることをOPに伝えるヒントです。 –
あなたはmain
への非ポータブルenvp引数を使用することができる場合がありますあなたは他のOSを与える明らかにOSX
に
int main(int argc,char* argv[], char** envp)
やボーナスなどをおappleを持っているが情報を供給:
int main(int argc, char **argv, char **envp, char **apple)
しかし、それは何のために使われていますか?まあ、Appleはリンゴベクトルを使って、どのような "隠された"パラメータをどんなプログラムにも渡すことができます。そして、彼らも実際にそれを使用します。現在、apple [0]には、実行中のバイナリがディスク上で見つかったパスが含まれています。あなたが言うことは何ですか? apple [0]とargv [0]の違いは?相違点は、execve(2)が呼び出されたときにargv [0]を任意の値に設定できることです。例えば、シェルは、多くの場合、[0]がARGVの最初の文字とログインシェルを起動することによって、通常のシェルからログインシェルを区別 -
おっと、私はsystem
はあなたがターミナルコマンドを実行することができますことを忘れてしまいました。
このコードは、私は必要なものを私に与えます:
std::cout << "List of environment variables: << std::endl;
system("env");
これは、プログラムで変数を使用できるようにするものではなく、標準出力に出力するだけです。 –
魔法はここにある:[env.c](http://minnie.tuhs.org/cgi-bin/utree.pl?file=OpenSolaris_b135/cmd/env/ env.c)。 – dasblinkenlight
シェルコマンドは 'ENV'ではなく' env'です(これを修正するためにあなたの質問を編集しました)。 –