GETENV(3) | FreeBSD Library Functions Manual | GETENV(3) |
名称
getenv, putenv, setenv, unsetenv — 環境変数関数ライブラリ
Standard C Library (libc, -lc)書式
#include < stdlib.h> char *
getenv( const char *name);
int
setenv( const char *name, const char *value, int overwrite);
int
putenv( char *string);
int
unsetenv( const char *name);
解説
これらの関数は、ホストの environment list から環境変数をセット、アンセット、取り出しを行います。getenv() 関数は、環境変数 name の現在の値を取得します。アプリケーションは getenv() 関数によって指された文字列を変更するべきではありません。
setenv() 関数は、環境変数 name を現在の環境リストに挿入または再設定します。変数 name がリストにない場合は、与えられた value に設定されて挿入されます。変数が存在する場合は引数 overwrite が検査され、 overwrite が 0 ならば変数は再設定されず、そうでなければ、与えられた value に再設定されます。
putenv() 関数は、形式 ``name=value'' の引数を取り、現在の環境変数にそれを直接入れるので、引数の変更は、環境変数が変更されます。変数 name がリスト中に存在していないなら、それは与えられた value で挿入されます。変数 name が存在しているなら、それは与えられた value にリセットされます。
unsetenv() 関数は、リストから name で示される変数名のインスタンスをすべて削除します。
内部の使用法のために環境のコピーが行われている間に不正 (例えば、値のない名前) が検出されなら、 setenv(), unsetenv() と putenv() は、問題に関して stderr に警告を出力し、不正なエントリを落として、エラーなしでタスクを終了します。
戻り値
getenv() 関数は、 ヌル文字 で終了する文字列として環境変数の値を返します。環境変数 name が現在の環境になければ、 NULL が返されます。
The setenv(), putenv(), and unsetenv() functions return the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indicate the error.
エラー
- [ EINVAL]
-
関数
getenv(),
setenv() または
unsetenv() は、
name が
NULL ポインタ、空の文字列を指す、または“
=
”文字を含む文字列を指しているので、失敗しました。関数 putenv() は、 string が NULL ポインタ、 string に“
=
”文字がない、または“=
”が string の最初の文字であるので、失敗しました。これは、 POSIX 仕様に従いません。 - [ ENOMEM]
- 関数 setenv(), unsetenv() または putenv() は、環境変数にメモリを割り付けることができなかったために、失敗しました。
規格
getenv() 関数は、 ISO/IEC 9899:1990 (“ISO C90”) に適合しています。 setenv(), putenv() と unsetenv() 関数は、 IEEE Std 1003.1-2001 (“POSIX.1”) に適合しています。歴史
関数 setenv() と unsetenv() は、 Version 7 AT&T UNIX で登場しました。 putenv() 関数は、 4.3BSD-Reno で登場しました。FreeBSD 7.0 まで、 putenv() は、 string のコピーを行い、 setenv() を使用して、それを環境変数に挿入していました。これは、 POSIX 仕様に従うために ``name=value'' のペアのメモリの位置として、 string を使用するために、変更されました。
バグ
同じ name に前の値よりも大きいサイズの value を割り当てる setenv() への連続した呼び出しは、メモリリークをもたらします。この関数のための FreeBSD のセマンティック (動作) は、(すなわち、 value の内容がコピーされ、古い値がいつまでもアクセス可能のまま残される) このバグを回避できなくします。将来のバージョンで、このバグを修正するためにこの動作の保証の 1 つまたは両方を削除するかもしれません。June 20, 2007 | FreeBSD |