C言語関係掲示板

過去ログ

No.131..batファイルで環境変数の値を使用したい


No.769

環境変数について
投稿者---kuroneko(2002/01/10 19:57:33)


kuronekoです。
ひさしぶりに、皆さんのお力をお借りしたく、投稿致しました。

プログラム中で、環境変数に値をセットして、呼び元で
その環境変数の値を使用したいのですが、putenvでは
プログラムの終了とともに、環境変数がなくなってしまいます。

この場合どのようにしたら、いいのでしょうか。
プログラムは、.batファイルから実行(呼び出し)し、.batファイルで
その環境変数の値を使用したいのです。

よろしくお願い致します。


No.775

Re:環境変数について
投稿者---kikk(2002/01/11 00:16:43)


ども。


>プログラム中で、環境変数に値をセットして、呼び元で
>その環境変数の値を使用したいのですが、putenvでは
>プログラムの終了とともに、環境変数がなくなってしまいます。

もう調べたと思いますが、どうもこれはputenv()の仕様のようです。


>プログラムは、.batファイルから実行(呼び出し)し、.batファイルで
>その環境変数の値を使用したいのです。

シェルの環境を直接変えるのは難しいかと。
上記の目的なら、Cプログラムで環境変数をSETするBATファイルを作成し、
作ったBATをCALLするという手もあります。また、main()の返り値を
ERRORLEVELで取得するとか、環境変数で得ようと思っている値を名前とする
ファイルを作って、(IF EXIST等で)どうにかするなど、環境変数を介する
以外の他の手段も検討してみてはどうでしょうか(後者は冗談ですが)。
どうしても環境変数でなければならない場合も、ERRORLEVELで分岐して
SETするという方法もありますし。


では。

No.778

Re:環境変数について
投稿者---kuroneko(2002/01/11 09:43:55)


おはようございます。
kuronekoです。

>シェルの環境を直接変えるのは難しいかと。
>上記の目的なら、Cプログラムで環境変数をSETするBATファイルを作成し、
>作ったBATをCALLするという手もあります。また、main()の返り値を
>ERRORLEVELで取得するとか、環境変数で得ようと思っている値を名前とする
>ファイルを作って、(IF EXIST等で)どうにかするなど、環境変数を介する
>以外の他の手段も検討してみてはどうでしょうか(後者は冗談ですが)。
>どうしても環境変数でなければならない場合も、ERRORLEVELで分岐して
>SETするという方法もありますし。

ご返答ありがとうございます。
単純に思い付いた方法として、system()でsetコマンドを実行すればいいのかな?と思い試したのですが、system()ではset 環境変数名=値では設定され
ませんでした。
これは、system()や、OS等の仕様でそうなっているのでしょうか?
(set だけsystem()で実行することはできたのですが)

よろしくお願いします。

No.783

Re:環境変数について
投稿者---kikk(2002/01/11 12:36:13)


ども。


system()は新しいシェルをよびだして、引数をそのままシェルに渡します。
したがって、Cプログラムが走っているプロセスとは別プロセスで動作します
(たぶん子プロセス)。ので、環境は引き継がれはしますが、変更しても
もとのほう(親の親?)には反映されないはずです。putenv()で期待した動作を
しないのも似たような理由だと思います。


では。

No.784

Re:環境変数について
投稿者---kuroneko(2002/01/11 13:20:18)


kuronekoです。

>system()は新しいシェルをよびだして、引数をそのままシェルに渡します。
>したがって、Cプログラムが走っているプロセスとは別プロセスで動作します
>(たぶん子プロセス)。ので、環境は引き継がれはしますが、変更しても
>もとのほう(親の親?)には反映されないはずです。putenv()で期待した動作を
>しないのも似たような理由だと思います。

ご返答ありがとうございました。
確かに、冷静に考えてみると子プロセスの有効範囲と、親プロセスの有効範囲
は違うので、無理な話だったかもしれません。

お手数をお掛けしました。

戻る


「初心者のためのポイント学習C言語」 Last modified:2002.02.03
Copyright(c) 2000-2002 TOMOJI All Rights Reserved