あなたの「必」の書き順を教えてください

Linux(Red Hat Enterprise)環境で、C++でライブラリを作ろうとしていますが、環境変数の受け取り方がわかりません。調べてみたところ、Windows(VC++)のものしか見つけることができませんでした。LinuxのC++で、環境変数を受け取る方法を教えて下さい。

A 回答 (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
…略
    • good
    • 0
この回答へのお礼

お礼がおそくなり、どうもすみません。早速のご回答、どうもありがとうございました。詳しいソース付きで、大変参考になりました。

お礼日時:2007/08/25 01:19

<cstdlib>をインクルードして、std::getenv関数を使えば環境変数を参照できます。

これは、標準関数ですので、(規格合致依存処理系であれば)LinuxもWindowsも関係なく使うことができます。

ちなみに、環境変数の参照はstd::getenvでできますが、設定の方は標準規格の範囲で行うことはできません。
    • good
    • 0
この回答へのお礼

お礼がおそくなり、どうもすみません。早速のご回答、どうもありがとうございました。こんな標準ライブラリがあったのですね。参考になりました。

お礼日時:2007/08/25 01:17

char *getenv(const char *name); では?

    • good
    • 0
この回答へのお礼

お礼が遅くなり、どうもすみません。早速のご回答、ありがとうございました。

お礼日時:2007/08/25 01:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報