グローバル変数 `environ`を介してアクセスできる文字列は、環境への変更を反映していませんか?

ティム

https://unix.stackexchange.com/a/436631/674から

ファイル/proc/$$/environ...は環境への変更を反映していませんがexec、プロセスによって編集されたときにプログラムが受け取ったものを報告するだけです。

APUEから:

各プログラムには、環境リストも渡されます。引数リストと同様に、環境リストは文字ポインタの配列であり、各ポインタにはnullで終了するC文字列のアドレスが含まれています。ポインタの配列のアドレスは、グローバル変数に含まれていますenviron

extern char **environ;

特定の環境変数へのアクセスは、通常、environ変数ではなく、セクション7.9で説明されているgetenvandputenv関数を介して行われます。ただし、環境全体を調べるには、environポインターを使用する必要があります。

ある/proc/$$/environグローバル変数とenviron相互に、または互いに矛盾から独立しましたか?

経由でアクセスされる文字列environも環境への変更を反映していませんが、受信した環境を報告するだけexecve()ですか?

または、を介しenvironアクセスされる文字列は、常にgetenv最新の環境文字列を取得するように、常にそれらへの変更を反映しますか?

経由でアクセスされる文字列getenvは常に変更を反映し、常に最新ですか?

ありがとう。

JohanMyréen

/proc/$$/environと変数environは独立しています。environは環境への変更を反映します。実際、environ環境変数がを介して環境に追加されると、のポインタの値も変更されますputenv()(ただし、これは実装の詳細です)。

システムコールレベルとライブラリレベルを区別する必要があります。システムコールレベルでは、環境に関連する唯一のメカニズムはenvpexecveコールへの引数です。このパラメーターにはname=value、新しいプログラムの環境を構成するペアが含まれていることが期待されますこの環境は新しいプロセスのスタックにコピーされ、そこでユーザースペースのスタートアップコードがそれを取得できます。

図書館レベルでは、

  • environ環境のコピーを指すグローバル変数
  • 機能getenv()putenv()環境の調査と変更のため
  • 暗黙的に(を介して)または明示的に(パラメーターを介して渡される)環境にアクセスするexec*関数ファミリー(を含まないexecveenviron

exec*ライブラリ関数は、最終的に呼び出すexecveシステムコールを。 変数は、スタック上の環境を指していません。 代わりに、 変数が設定される 前に環境がプロセスヒープにコピーされます (これも実装の詳細です)。 environ environ

なぜ/proc/$$/environ環境の変化を反映しないのですか?/proc/$$/environはカーネルによって提供される仮想ファイルであり、カーネルには、ユーザープロセスのアドレス空間でこの低レベルで何が起こっているかを知る方法がありません。カーネルはenviron変数を認識しておらず、環境を格納するためにプロセスが使用するデータ構造を認識していません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

グローバル変数を使用してcollectionViewセル変数にアクセスできません

分類Dev

FirefoxDriverを介してグローバル変数にアクセスできません

分類Dev

Postman の環境変数を介して JavaScript オブジェクトにアクセスできません

分類Dev

Docker Set環境変数をubuntuに設定し、phpgetenvを介してアクセスできません

分類Dev

Dockerコンテナーは、VIRTUAL_HOST環境変数を介して別のコンテナーにアクセスできません

分類Dev

実際に誰かがenvironを直接使用して環境変数にアクセスしていますか?

分類Dev

グローバル変数またはローカル変数を使用して入力の値にアクセスできない

分類Dev

PowerShellの開始プロセスは環境変数(PATH)の変更を認識していません

分類Dev

関数を介してグローバル変数を変更します:UnboundLocalError

分類Dev

グローバルPATH環境変数を編集しても安全ですか?

分類Dev

プロセススレッドはグローバル変数の変更を感知できません

分類Dev

警告:「ファイル '/ 3'がローカルに見つかりません。修正するには、環境変数PHP_IDE_CONFIGでサーバー名を設定し、デバッグセッションを再開してください。」

分類Dev

javascriptのグローバル変数にアクセスできませんか?

分類Dev

グローバル変数の変更

分類Dev

関数内のグローバル変数を変更できません(Javascript)

分類Dev

関数内のグローバル変数を変更できません

分類Dev

Jenkins:グローバル関数の本体で環境変数を取得します

分類Dev

jQueryを介してCSS変数をグローバルに変更することは可能ですか?

分類Dev

並列sapplyを使用したグローバル環境変数への値の割り当て

分類Dev

グローバル定数を使用して環境変数を格納する

分類Dev

文字列とリストの変数スコープは異なりますか?リストはグローバル変数を指定せずに関数で変更できますが、文字列は変更できません

分類Dev

文字列とリストの変数スコープは異なりますか?リストはグローバル変数を指定せずに関数で変更できますが、文字列は変更できません

分類Dev

Reactの関数でグローバル変数を渡して変更しないようにする方法は?

分類Dev

Kubernetesステートフルセット環境変数を介してPostgresqlmax_connections構成を変更するにはどうすればよいですか?

分類Dev

クリーンアップ後のグローバル変数へのアクセスをc ++で理解しても、なんらかのエラーは発生しません

分類Dev

グローバルを使用しない、またはCの関数入力を変更しない、関数内の配列への変数の割り当て

分類Dev

グローバル変数を変更しない関数

分類Dev

クラス内からグローバル変数を変更し、別のView Controllerでアクセスするにはどうすればよいですか?

分類Dev

LLVMIRはグローバル変数にアクセスできません

Related 関連記事

  1. 1

    グローバル変数を使用してcollectionViewセル変数にアクセスできません

  2. 2

    FirefoxDriverを介してグローバル変数にアクセスできません

  3. 3

    Postman の環境変数を介して JavaScript オブジェクトにアクセスできません

  4. 4

    Docker Set環境変数をubuntuに設定し、phpgetenvを介してアクセスできません

  5. 5

    Dockerコンテナーは、VIRTUAL_HOST環境変数を介して別のコンテナーにアクセスできません

  6. 6

    実際に誰かがenvironを直接使用して環境変数にアクセスしていますか?

  7. 7

    グローバル変数またはローカル変数を使用して入力の値にアクセスできない

  8. 8

    PowerShellの開始プロセスは環境変数(PATH)の変更を認識していません

  9. 9

    関数を介してグローバル変数を変更します:UnboundLocalError

  10. 10

    グローバルPATH環境変数を編集しても安全ですか?

  11. 11

    プロセススレッドはグローバル変数の変更を感知できません

  12. 12

    警告:「ファイル '/ 3'がローカルに見つかりません。修正するには、環境変数PHP_IDE_CONFIGでサーバー名を設定し、デバッグセッションを再開してください。」

  13. 13

    javascriptのグローバル変数にアクセスできませんか?

  14. 14

    グローバル変数の変更

  15. 15

    関数内のグローバル変数を変更できません(Javascript)

  16. 16

    関数内のグローバル変数を変更できません

  17. 17

    Jenkins:グローバル関数の本体で環境変数を取得します

  18. 18

    jQueryを介してCSS変数をグローバルに変更することは可能ですか?

  19. 19

    並列sapplyを使用したグローバル環境変数への値の割り当て

  20. 20

    グローバル定数を使用して環境変数を格納する

  21. 21

    文字列とリストの変数スコープは異なりますか?リストはグローバル変数を指定せずに関数で変更できますが、文字列は変更できません

  22. 22

    文字列とリストの変数スコープは異なりますか?リストはグローバル変数を指定せずに関数で変更できますが、文字列は変更できません

  23. 23

    Reactの関数でグローバル変数を渡して変更しないようにする方法は?

  24. 24

    Kubernetesステートフルセット環境変数を介してPostgresqlmax_connections構成を変更するにはどうすればよいですか?

  25. 25

    クリーンアップ後のグローバル変数へのアクセスをc ++で理解しても、なんらかのエラーは発生しません

  26. 26

    グローバルを使用しない、またはCの関数入力を変更しない、関数内の配列への変数の割り当て

  27. 27

    グローバル変数を変更しない関数

  28. 28

    クラス内からグローバル変数を変更し、別のView Controllerでアクセスするにはどうすればよいですか?

  29. 29

    LLVMIRはグローバル変数にアクセスできません

ホットタグ

アーカイブ