C言語関係掲示板

過去ログ

No.1241 systemで環境変数のセット

[戻る] [ホームページ]
No.2330

7章のsystemについて
投稿者---クワトロ(2004/07/20 11:23:27)


このサイトで1章から順に勉強してまして、7章までとりあえず来ました。
7章の「一般ユーティリティ関数」のsystemという関数で質問させてください。
system("set");
という記述だと環境変数の一覧みたいなのが表示されます。
(WinXPでBorland5.5です)
そこで、set tomcat_home=C:\Tomcat 4.1を追加しようと
system("set tomcat_home=C:\Tomcat 4.1");
としてみたんですが、この後でもう一度
system("set");とやると、tomcat_homeの記述がありません。
つまり、セットされてないように思います。
実際に試したみたのが
#include <stdlib.h>
#include <stdio.h>

int main(void)
{
    char str[] = "set";
    system(str);
    system("set tomcat_home=C:\Tomcat 4.1");
    getchar();
    system(str);
    getchar();
    
    return 0;
}

です。
うまくセットできる方法があれば教えてください。
宜しくお願いいたします。



No.2338

Re:7章のsystemについて
投稿者---YuO(2004/07/20 20:41:33)


>そこで、set tomcat_home=C:\Tomcat 4.1を追加しようと
>system("set tomcat_home=C:\Tomcat 4.1");
>としてみたんですが、この後でもう一度
>system("set");とやると、tomcat_homeの記述がありません。
>つまり、セットされてないように思います。

単純に,
set tomcat_home=C:\Tomcat 4.1
をコマンドプロセッサが実行して,コマンドプロセッサ自身のプロセスの環境変数に追加した後,
コマンドプロセッサは終了します。

その後,
set
と実行したところで,先の環境変数への変更はプロセス内で閉じているため,
tomcat_homeへの変更は見つかりません。
#親プロセスの環境変数が引き継がれているはず。


>うまくセットできる方法があれば教えてください。

親プロセスの環境変数を変更する方法は無いと思います。
システムやユーザーの環境変数を変更する方法であれば,MSDNEnvironment Variablesあたりが参考になるでしょう。



No.2340

Re:7章のsystemについて
投稿者---RAPT(2004/07/21 00:38:46)


WinNT系なら、cmd /k でコマンドを実行し、「終了しないでいること」は
できると思います。多分。


No.2344

Re:7章のsystemについて
投稿者---クワトロ(2004/07/21 10:44:07)


回答ありがとうございました。
2つめのコマンド実行の時点で1つ目はもう終わっていたんですね。
ありがとうございました。