• ベストアンサー

Linux環境変数設定(putenv?setenv?)

RedHatLinux7.3(2.96-110)、gcc(2.96 20000731)です。 C言語でプログラミングしていますが、環境変数設定がうまくいかず困っています。 下記の2つで試しましたが、どちらも戻り値は正常(0)なのに環境変数には設定されないのです。 その1: nRet = putenv( "HOGE_HOGE_VER=1.0.0" ); その2: nRet = setenv( "HOGE_HOGE_VER", "1.0.0", 1 ); この使い方は間違っているのでしょうか?それと、putenv、setenvの違いはなんなのでしょうか? ちなみに、既に設定されている環境変数をgetenvすることは、ちゃんとできるのですが。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

こんにちは。  どこからどこへ設定しようとしていますか?SunのUNIXしか経験はありませんが、プログラムを起動したシェルの環境変数を変えることはできませんよ。プログラムを起動すると、シェルがフォークします。このとき、シェルで設定されていた環境変数はプログラムに引き継がれます(引き継がない設定もあったと思います)。起動されたプログラムからは元のシェルの環境変数を操作できません。  遠い過去の記憶なので曖昧ですが、確かそのような動作をしていました。

secma
質問者

補足

こんにちは、回答ありがとうございます。 >起動されたプログラムからは元のシェルの環境変数を操作できません。 そうなのですか(+_+)!プログラムから環境変数"HOGE_HOGE_VER" の存在をチェックそして、設定されていなければ新たに作成、ということをやりたかったのです。 もう少し調べてみます。早々とありがとうございました。

その他の回答 (1)

  • ranx
  • ベストアンサー率24% (357/1463)
回答No.2

環境変数は、プログラムを起動する都度 (正確に言えば、プロセスが作られる都度) コピーされて引き継がれます。 複製をいくら変更したところで、元の環境変数は 変わりません。 ただ、変更されたプログラムからさらに別の プログラムを起動するような場合は、変更は きちんと引き継がれます。元のシェルの変数が 変わっていないからと心配する必要はありません。 何をなさりたいのか、もう一度ご確認下さい。

secma
質問者

補足

こんばんは、回答ありがとうございます。 >環境変数は、プログラムを起動する都度(正確に言えば、プロセスが作られる都度)コピーされて引き継がれます。 なるほど、そうなのですか。実はアプリケーションのバージョンNoを出力するのに環境変数が使えたら便利だな、と思ったのです。 別の方法を考えてみることにします。たいへん勉強になりました!ありがとうございました♪