私はこれがVARIABLE=value
環境変数を生成し、export VARIABLE=value
現在のシェルで生成されたプロセスで使用できることを知っています。env
現在の環境変数を表示しますが、その変数はどこにありますか?環境変数(または環境、この質問について)?
ベストアンサー1
環境は見えるほど魔法ではありません。シェルはそれをメモリに保存し、execve()
システムコールに渡します。子プロセスはそれを配列ポインタに継承しますenviron
。execve
マンページから:
要約
#include <unistd.h> int execve(const char *filename, char *const argv[], char *const envp[]);
argv
新しいプログラムに渡されるパラメーター文字列の配列。
通常、これらの文字列の最初には、実行中のファイルに関連付けられているファイル名を含める必要があります。envp
通常、キー=値型の文字列配列であり、新しいプログラムに環境に渡されます。
マンページはenviron(7)
またいくつかの洞察を提供します。
要約
extern char **environ;
説明する
この変数は、
environ
「environment」という文字列ポインタの配列を指します。配列の最後のポインタ値はですNULL
。 (この変数はユーザープログラムで宣言する必要がありますが、ヘッダーがlibc4またはlibc5から来た場合、glibcから来ており、_GNU_SOURCEが定義されている場合はヘッダーで宣言されます。<unistd.h>
)この文字列配列はprocess(3)プロセスを実行するために呼び出されます。
両方のGNUのマニュアルページは以下に関連しています。POSIX仕様