- ベストアンサー
C++で、環境変数の読み込み方を教えて下さい(Linux)
Linux(Red Hat Enterprise)環境で、C++でライブラリを作ろうとしていますが、環境変数の受け取り方がわかりません。調べてみたところ、Windows(VC++)のものしか見つけることができませんでした。LinuxのC++で、環境変数を受け取る方法を教えて下さい。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
他の方も回答していらっしゃるように、環境変数名がわかっていれば、getenv() で、その環境変数の値が取得できます。ここまでが、標準でできることですね。 Linux なら、putenv()やsetenv()やunsetenv()などの関数が用意されていて、それらの関数で環境変数の追加、変更、取り消しができるでしょう。さらに、以下のように、main() の第3引数でポインタ(envp)を受ければ、そのプロセスで実行時に設定されているすべての環境変数を調べることも、たぶんできるでしょう。 ポータビリティを重要視するなら、getenv() のみを使うべきだと思いますけど。 ===== ソース #include <iostream> #include <cstdlib> #include <string> int main(int argc, char *argv[], char *envp[]) { for (char **p = envp; *p; ++p) { std::cout << *p << '\n'; // 環境変数名の切り出し std::string s = *p; std::string::size_type i = s.find('='); if (i == std::string::npos) { std::cerr << "something wrong\n"; continue; } // getenv() による値の取得 std::string ss = s.substr(0, i); if (const char *v = std::getenv(ss.c_str())) std::cout << "getenv(" << ss << ")=" << v << '\n'; else std::cerr << s.substr(0, i) << ": something wrong\n"; } } ========= 実行結果 MAKE_MODE=unix getenv(MAKE_MODE)=unix INFOPATH=/usr/local/info:/usr/share/info:/usr/info: getenv(INFOPATH)=/usr/local/info:/usr/share/info:/usr/info: PROGRAMFILES=C:\Program Files getenv(PROGRAMFILES)=C:\Program Files …略
その他の回答 (2)
- jacta
- ベストアンサー率26% (845/3158)
<cstdlib>をインクルードして、std::getenv関数を使えば環境変数を参照できます。これは、標準関数ですので、(規格合致依存処理系であれば)LinuxもWindowsも関係なく使うことができます。 ちなみに、環境変数の参照はstd::getenvでできますが、設定の方は標準規格の範囲で行うことはできません。
お礼
お礼がおそくなり、どうもすみません。早速のご回答、どうもありがとうございました。こんな標準ライブラリがあったのですね。参考になりました。
- koko_u_
- ベストアンサー率18% (459/2509)
char *getenv(const char *name); では?
お礼
お礼が遅くなり、どうもすみません。早速のご回答、ありがとうございました。
お礼
お礼がおそくなり、どうもすみません。早速のご回答、どうもありがとうございました。詳しいソース付きで、大変参考になりました。