標準/拡張機能 | C/C++ | 依存項目 |
---|---|---|
POSIX.1a |
両方 |
#define _POSIX1_SOURCE 2
#include <env.h>
int setenv(const char *var_name, const char *new_value, int change_flag)
#define _UNIX03_SOURCE
#include <stdlib.h>
int setenv(const char *var_name, const char *new_value, int change_flag)
#include <stdlib.h>
int setenv(const char *var_name, const char *new_value, int change_flag)
環境変数を追加、変更、および削除します。
ユーザーのネーム・スペースでの違反を回避するために、この関数の POSIX 以外のバージョンには、2 つの名前があります。1 つの名前の接頭部には 2 つの下線文字が付き、もう 1 つの名前の接頭部には付きません。接頭部下線文字が付いていない名前は、LANGLVL(EXTENDED) を使用する場合にのみ表示されます。
この関数を使用するには、その外部エントリー・ポイント名 (2 つの下線文字で始まる名前) を使用して呼び出すか、LANGLVL(EXTENDED) を使用してコンパイルする必要があります。LANGLVL(EXTENDED) を使用すると、ヘッダー内の関連情報も表示されます。
var_name は、追加、変更、または削除を行う環境変数の名前を含む 文字ストリングへのポインターです。setenv() を呼び出すときに、var_name に等号 ('=') が含まれていると、setenv() は失敗し、errno には無効な引数が関数に渡されたことを示す値が設定されます。
new_value は、var_name で指定された環境変数の 値を含む文字ストリングへのポインターです。new_value が NULL ポインターの場合には、var_name で指定された環境変数のオカレンスすべての削除を指示しています。
var_name が既に定義済みで、環境変数テーブルに存在している 場合には、その値は new_value で更新されません。ただし、var_name が以前は未定義だった場合には、テーブルに 付加されます。
また、「_EDC_」および「_CEE_」も使用しないでください。これらは、ランタイム・ ライブラリーおよび Language Environment® によって使用されます。
setenv() 関数によって設定されている環境変数は、プログラムの存続時間だけ存在します。プログラム終了処理の前には保管されません。環境変数のその他の設定方法は、「z/OS XL C/C++ プログラミング・ガイド」の『環境変数の使用』を参照してください。
正常に実行された場合、setenv() は 0 を戻します。
正常に実行されなかった場合、setenv() は、-1 を戻し、発生した障害のタイプを示すように errno を設定します。
name 引数が NULL ポインターであるか、空ストリングを指しているか、または「=」文字を含むストリングを指しています。
⁄* CELEBS03
This example (program 1) sets the environment variable
_EDC_ANSI_OPEN_DEFAULT.
A child program (program 2) is then initiated via a system
call.
The example illustrates that environment variables are
propagated forward to a child program, but not backward to
the parent.
*⁄
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *x;
⁄* set environment variable _EDC_ANSI_OPEN_DEFAULT to "Y" *⁄
setenv("_EDC_ANSI_OPEN_DEFAULT","Y",1);
⁄* set x to the current value of the _EDC_ANSI_OPEN_DEFAULT*⁄
x = getenv("_EDC_ANSI_OPEN_DEFAULT");
printf("program1 _EDC_ANSI_OPEN_DEFAULT = %s¥n",
(x != NULL) ? x : "undefined");
⁄* call the child program *⁄
system("program2");
⁄* set x to the current value of the _EDC_ANSI_OPEN_DEFAULT*⁄
x = getenv("_EDC_ANSI_OPEN_DEFAULT");
printf("program1 _EDC_ANSI_OPEN_DEFAULT = %s¥n",
(x != NULL) ? x : "undefined");
}
⁄* CELEBS04
Program 2:
A child program of CELEBS03, which is initiated via a system call.
*⁄
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *x;
⁄* set x to the current value of the _EDC_ANSI_OPEN_DEFAULT*⁄
x = getenv("_EDC_ANSI_OPEN_DEFAULT");
printf("program2 _EDC_ANSI_OPEN_DEFAULT = %s¥n",
(x != NULL) ? x : "undefined");
⁄* clear the Environment Variables Table *⁄
setenv("_EDC_ANSI_OPEN_DEFAULT", NULL, 1);
⁄* set x to the current value of the _EDC_ANSI_OPEN_DEFAULT*⁄
x = getenv("_EDC_ANSI_OPEN_DEFAULT");
printf("program2 _EDC_ANSI_OPEN_DEFAULT = %s¥n",
(x != NULL) ? x : "undefined");
}
program1 _EDC_ANSI_OPEN_DEFAULT = Y
program2 _EDC_ANSI_OPEN_DEFAULT = Y
program2 _EDC_ANSI_OPEN_DEFAULT = undefined
program1 _EDC_ANSI_OPEN_DEFAULT = Y