C++ で環境変数を設定するにはどうすればよいですか?
- 過去のプログラム実行を保持する必要はありません
- それらは現在のプロセスでのみ表示される必要があります
- プラットフォーム非依存の設定ですが、私の問題では Win32/64 でのみ動作する必要があります
ありがとう
名前 putenv - 環境変数を変更または追加する あらすじ #include <stdlib.h> int putenv(char *string); 説明 putenv() 関数は、環境の値を追加または変更します 変数。引数文字列は、name=value の形式です。名前が 環境にまだ存在しない場合、文字列が 環境。name が存在する場合、 環境が価値に変わります。string が指す文字列は次のようになります。 環境の一部なので、文字列を変更すると環境が変わります。
Win32 では _putenv と呼ばれていると思います。
長くて醜い関数名が好きなら、SetEnvironmentVariableも参照してください。
環境変数は、このプログラムの実行以外では使用されないため、必要なものであることに肯定的ではありません。OS を使用する必要はありません。
これらすべての値を保持するシングルトン クラスまたは名前空間を用意し、プログラムの開始時に初期化する方がよい場合があります。
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char* argv[])
{
char *var, *value;
if (argc == 1 || argc > 3) {
fprintf(stderr, "usage:environ variables \n");
exit(0);
}
var = argv[1];
value = getenv(var);
//---------------------------------------
if (value) {
printf("variable %s has value %s \n", var, value);
}
else
printf("variable %s has no value \n", var);
//----------------------------------------
if (argc == 3) {
char* string;
value = argv[2];
string = malloc(strlen(var) + strlen(value) + 2);
if (!string) {
fprintf(stderr, "out of memory \n");
exit(1);
}
strcpy(string, var);
strcat(string, "=");
strcat(string, value);
printf("calling putenv with: %s \n", string);
if (putenv(string) != 0) {
fprintf(stderr, "putenv failed\n");
free(string);
exit(1);
}
value = getenv(var);
if (value)
printf("New value of %s is %s \n", var, value);
else
printf("New value of %s is null??\n", var);
}
exit(0);
} //----main
# commands to execure on linux
# compile:
$ gcc -o myfile myfile.c
# run:
$./myfile xyz
$./myfile abc
$./myfile pqr