書式
#include <stdlib.h>
int putenv(char *string);
glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照):
putenv(): _SVID_SOURCE || _XOPEN_SOURCE
説明
putenv() 関数は、環境変数の追加または値の変更を行う。 引数 string は name=value という形式を取る。 name が環境に存在しない場合は string が環境に追加される。 name が環境に存在する場合は name の値は value に変更される。 string が指している文字列は環境の一部となるので、 文字列を変更すると環境も変更される。返り値
putenv() 関数は、成功すると 0 を返し、エラーの場合は 0 以外の値を返す。エラーが発生した場合、 errno に原因を示す値が設定される。エラー
- ENOMEM
- 新しい環境を割り当てるのに十分な空きがない。
準拠
SVr4, POSIX.1-2001, 4.3BSD.注意
putenv() はリエントラントであることを求められていない。 libc4, libc5, glibc 2.0 ではリエントラントではない。 glibc 2.1 ではリエントラントである。libc4, libc5, glibc に関する説明: もし引数 string が name 単独で、 '=' 文字を含んでいない場合、環境変数 name は環境から除去される。 もし putenv() が新しい environ 配列を確保しなければならない時、 以前の environ 配列も putenv() によって確保されたものならば、 それは解放される。 環境変数そのものに割り当てられた古い記憶領域が解放されることはない。
libc4 と libc5 と glibc 2.1.2 では SUSv2 に準拠している。 putenv() で与えられたポインタ string が使われる。 この文字列は環境の一部となり、後で変更すると環境も変わる。 (従って、 putenv() を自動変数を引数として呼び出し、 stringが環境の一部のままで呼び出した関数から return するとエラーになる) しかし、glibc 2.0-2.1.1 では異なり、文字列のコピーが使われる。 これはメモリリークを引き起こすだけでなく、 SUSv2 に違反している。 これは glibc2.1.2 で修正された。
4.4BSD バージョンでは、glibc 2.0 と同様にコピーを使う。
SUSv2 ではプロトタイプから const が取り除かれており、 glibc 2.1.3 もそのようになっている。
この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.65 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。