_putenv、_wputenv
環境変数を作成、変更、または削除します。 これらの関数のセキュリティを強化したバージョンについては、「_putenv_s、_wputenv_s」を参照してください。
int _putenv(
const char *envstring
);
int _wputenv(
const wchar_t *envstring
);
パラメーター
- envstring
環境文字列の定義。
戻り値
正常に終了した場合は 0、エラーが発生した場合は –1 を返します。
解説
_putenv 関数は、新しい環境変数を追加するか、既存の環境変数の値を変更します。 環境変数は、プロセスが実行される環境を定義します (たとえば、プログラムとリンクするライブラリの既定の検索パスなど)。 _wputenv 関数は、_putenv 関数のワイド文字バージョンです。_wputenv 関数の引数 envstring は、ワイド文字列です。
汎用テキスト ルーチンのマップ
Tchar.h のルーチン |
_UNICODE および _MBCS が未定義の場合 |
_MBCS が定義されている場合 |
_UNICODE が定義されている場合 |
---|---|---|---|
_tputenv |
_putenv |
_putenv |
_wputenv |
envstring 引数には、varname=string の形式で文字列へのポインターを指定する必要があります。varname は追加または変更する環境変数の名前、string は変数の値になります。 varname が既に環境に設定されている場合は、その値が string に置き換えられます。それ以外の場合は、新しい varname 変数とその string 値が環境に追加されます。 環境変数を削除するには、string に空の文字列を指定します。つまり、varname= だけを指定します。
_putenv 関数と _wputenv 関数は、現在のプロセスのローカル環境にしか影響しません。これらの関数を使用して、コマンド レベルの環境は変更できません。 つまり、これらの関数で変更できるのは、ランタイム ライブラリにアクセスできるデータ構造だけであり、オペレーティング システムによってプロセス用に作成される環境セグメントは変更しません。 現在実行中のプロセスが終了すると、呼び出しプロセス (ほとんどの場合はオペレーティング システム レベル) の環境が復元されます。 ただし、変更された環境は、_spawn、_exec、または system の各関数で作成された新しいプロセスに渡すことができます。新しいプロセスは、_putenv 関数および _wputenv 関数によって追加された新しい項目を取得します。
環境エントリは直接変更しないでください。代わりに、使用_putenvまたは_wputenvそれを変更します。 特に、_environ[] グローバル配列の要素を直接解放すると、無効なメモリ アドレスが指定される可能性があります。
getenv 関数および _putenv 関数は、_environ グローバル変数を使用して環境テーブルにアクセスします。したがって、_wgetenv 関数および _wputenv 関数は _wenviron を使用します。 _putenv 関数および _wputenv 関数は、_environ および _wenviron の値を変更する場合があるため、main の _envp 引数、および wmain の _wenvp 引数は無効になります。 したがって、環境情報にアクセスする場合は、_environ または _wenviron を使用する方が安全です。 _putenv 関数および _wputenv 関数とグローバル変数の関係については、_environ、_wenviron の説明を参照してください。
注意
_putenv 系関数と _getenv 系関数はスレッド セーフではありません。 _putenv が文字列を変更している間に _getenv が文字列ポインターを返すことがあり、これはランダム エラーの原因になります。 これらの関数の呼び出しが同期されていることを確認する必要があります。
必要条件
ルーチン |
必須ヘッダー |
---|---|
_putenv |
<stdlib.h> |
_wputenv |
<stdlib.h> または <wchar.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
使用例
_putenv の使用例については、「getenv、_wgetenv」を参照してください。
同等の .NET Framework 関数
該当なし標準 C 関数を呼び出すには、PInvoke を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。