getenv, getenv_s
From ja.cppreference.net
|
定義済みヘッダー
<stdlib.h>
|
||
|
char
*
getenv
(
const
char
*
name
)
;
|
(1) | |
|
errno_t getenv_s
(
size_t
*
restrict
len,
char
*
restrict
value,
rsize_t valuesz, const char * restrict name ) ; |
(2) | (C11以降) |
1)
ホスト指定の環境リスト内で名前
name
の環境変数を検索し、一致した環境変数に関連付けられた文字列へのポインタを返します。環境変数のセットとそれを変更する方法は実装定義です。
この関数はスレッドセーフである必要はありません。
getenvへの別の呼び出しや、POSIX関数
setenv()
、
unsetenv()
、および
putenv()
の呼び出しは、前回の呼び出しで返されたポインタを無効にしたり、前回の呼び出しで取得した文字列を変更したりする可能性があります。
getenvによって返される文字列を変更することは未定義動作を引き起こします。
2)
(1)
と同様ですが、環境変数の値はユーザー提供のバッファ
value
(nullでない場合)に書き込まれ、書き込まれたバイト数はユーザー提供の位置
*
len
(nullでない場合)に格納されます。環境変数が環境に設定されていない場合、ゼロが
*
len
(nullでない場合)に書き込まれ、
'
\0
'
が
value
[
0
]
(nullでない場合)に書き込まれます。さらに、以下のエラーが実行時に検出され、現在インストールされている
制約ハンドラ
関数を呼び出します:
-
- name がnullポインタ
- valuesz が RSIZE_MAX より大きい
- value がnullポインタかつ valuesz がゼロでない
-
すべての境界チェック付き関数と同様に、
getenv_sは、実装によって __STDC_LIB_EXT1__ が定義されており、かつユーザーが <stdlib.h> をインクルードする前に __STDC_WANT_LIB_EXT1__ を整数定数 1 に定義している場合にのみ利用可能であることが保証されます。
目次 |
パラメータ
| name | - | 検索対象の環境変数の名前を特定するnull終端文字列 |
| len | - |
getenv_s
が環境変数の長さを格納するユーザー提供の位置へのポインタ
|
| value | - |
getenv_s
が環境変数の内容を格納するユーザー提供の文字配列へのポインタ
|
| valuesz | - |
getenv_s
が
dest
に書き込みを許可される最大文字数(バッファのサイズ)
|
戻り値
1)
環境変数の値を識別する文字列、またはそのような変数が見つからない場合はnullポインタ。
2)
環境変数が見つかった場合はゼロ、見つからなかった場合または実行時制約違反が発生した場合は非ゼロ。エラー時には、
*
len
にゼロを書き込む(ただし
len
がnullポインタでない場合)。
注記
POSIXシステムでは、
環境変数
はグローバル変数
environ
を通じてアクセス可能であり、これは
extern
char
**
environ
;
として
<unistd.h>
で宣言されています。また、
main関数
のオプションの第三引数
envp
を通じてもアクセスできます。
getenv_s の呼び出しにおいて、
value
に null ポインタを、
valuesz
にゼロを指定すると、結果全体を格納するために必要なバッファサイズを決定するために使用されます。
例
このコードを実行
#include <stdio.h> #include <stdlib.h> int main(void) { const char *name = "PATH"; const char *env_p = getenv(name); if (env_p) printf("Your %s is %s\n", name, env_p); }
出力例:
Your PATH is /home/gamer/.local/bin:/usr/local/bin:/usr/bin:/bin:/usr/share/games
参考文献
- C23規格 (ISO/IEC 9899:2024):
-
- 7.22.4.6 getenv関数 (p: TBD)
-
- K.3.6.2.1 getenv_s関数 (p: TBD)
- C17規格 (ISO/IEC 9899:2018):
-
- 7.22.4.6 getenv関数 (p: 256-257)
-
- K.3.6.2.1 getenv_s関数 (p: 440-441)
- C11規格 (ISO/IEC 9899:2011):
-
- 7.22.4.6 getenv関数 (p: 352-353)
-
- K.3.6.2.1 getenv_s関数 (p: 606-607)
- C99規格 (ISO/IEC 9899:1999):
-
- 7.20.4.5 getenv関数 (p: 317)
- C89/C90標準 (ISO/IEC 9899:1990):
-
- 4.10.4.4 getenv関数
関連項目
|
C++ ドキュメント
for
getenv
|