2013-05-27 6 views
6

私は、C++でプログラミングするとき、getenvで個々の環境変数にアクセスできることを知っています。c/C++ app内のすべての環境変数をリストする方法

os x端末では、envを使用して、現在の環境変数をすべてリストすることもできます。

実行中のC++プログラムで使用できる環境変数の完全なリストを取得することに興味があります。それらをリストするc/C++関数はありますか?言い換えれば、私のC++コードからenvを呼び出す方法はありますか?

+2

魔法はここにある:[env.c](http://minnie.tuhs.org/cgi-bin/utree.pl?file=OpenSolaris_b135/cmd/env/ env.c)。 – dasblinkenlight

+0

シェルコマンドは 'ENV'ではなく' env'です(これを修正するためにあなたの質問を編集しました)。 –

答えて

10

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; 
} 
+0

確かに。 'man getenv'は、' environ(7) 'を記述する' SEE ALSO'セクションの底部にあります(OS Xでは、OPが言及しています)。そこで、 'man environ'はこれを説明するマンページを提供します。 'apropos environment'にはこのページも含まれています。これはRTFMを意味するものではありませんが、マンページの 'SEE ALSO'セクションがチェックする価値があることをOPに伝えるヒントです。 –

11

あなたは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の最初の文字とログインシェルを起動することによって、通常のシェルからログインシェルを区別 -

0

おっと、私はsystemはあなたがターミナルコマンドを実行することができますことを忘れてしまいました。

このコードは、私は必要なものを私に与えます:

std::cout << "List of environment variables: << std::endl; 
system("env"); 
+0

これは、プログラムで変数を使用できるようにするものではなく、標準出力に出力するだけです。 –

関連する問題