#Linux中的GCC规划#環境変数と非ローカルジャンプ

1環境テーブルの起源

  1. まず、前回の記事から、スタートアップルーチンが3つのもの(argc、argv、envp)をメイン関数に渡すことを学びました。
int main(int argc,char *argv[] ,char* envp[])h
argc 是 参数的个数。
argv是 参数表。
envp是环境表。

2環境テーブルのフォーマット

环境表:初始时,继承于父进程
extern char** environ;
其中包括有 :============
“HOME=/home/Kshine”
"PATH=/bin:/usr/bin"
"SHELL=/bin/bash"
"USER=Kshine"
"MAIL=/var/mail/kshine"
。。。。
。。。。
。。。。
。。。。
NULL
=====================

3環境テーブルのテストコードを取得する

  1. コードは以下のように表示されます:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
extern char **environ;//导入该变量
int main(int argc,char* argv[]){
	int i=0;
	char* ptr = environ[i];//指向第一个环境变量等式
	while(ptr!=NULL){
		printf("%s\n",ptr)
	}
	return 0;
}

  1. 演算結果:
kshine@kshine-virtual-machine:~/桌面$ vi test_environ.c
kshine@kshine-virtual-machine:~/桌面$ gcc test_environ.c -o te -Wall
kshine@kshine-virtual-machine:~/桌面$ ./te
SSH_AGENT_PID=2215
GPG_AGENT_INFO=/tmp/keyring-8rYgpt/gpg:0:1
TERM=xterm
SHELL=/bin/bash
...
...(此处省略)
...
DISPLAY=:0.0
XDG_CURRENT_DESKTOP=Unity
GTK_IM_MODULE=ibus
LESSCLOSE=/usr/bin/lesspipe %s %s
COLORTERM=gnome-terminal
XAUTHORITY=/home/kshine/.Xauthority
OLDPWD=/home/kshine
_=./te

4環境変数演算機能

  1. ヘッドファイル
#include <stdlib.h>
  1. いくつかの関連機能
(1)获取环境变量值
char *getenv(const char *name);

(2)放入“name = value”形式的字符串。(覆盖),成功返回0,失败返回-1
int putenv(char*str);

(3)设置具体的name的value。(rewrite决定是否覆盖),成功返回0,失败返回-1
int setenv(const char *name,const char * value,int rewrite);

(4)删除name的定义(无论是否存在),成功返回0,失败返回-1
int unsetenv(const char* name);

5非局所ジャンプ

Cプログラムでは、例外処理を行うためにジャンプが必要です。
関数内でジャンプ(部分ジャンプ)する場合、gotoが使用されることはわかっています。
あなたが実行したい場合は非ローカルジャンプを、あなたはジャンプ機能を使用する必要がlongjmp関数を

  1. ヘッドファイル
#include <setjmp.h>
  1. 関連機能
(1) 设置非局部跳转的跳转点
int setjmp(jmp_buf env);

(2) 进行非局部跳转,val作为返回值
void longjmp(jmp_buf env,int val);

  1. envパラメータに注意してください:
    (1)特別なタイプjmp_buf。
    (2)longjmpを呼び出すときに、スタック状態の復元に使用されるすべての情報を保存します。
    longjmp非ローカルジャンプ後:
    (1)グローバル変数、静的変数、揮発性変数を元の値に復元できません。
    (2)レジスタ変数を元の値に戻すことができます。
    (3)自動変数(auto)は、最適化されたコンパイル後に元の値に復元できます。

おすすめ

転載: blog.csdn.net/Kshine2017/article/details/103885567