#Linux 中 的 GCC 规划 # Variables de entorno y saltos no locales

1 El origen de la tabla medioambiental

  1. En primer lugar, hemos aprendido del artículo anterior que la rutina de inicio pasa tres cosas (argc, argv, envp) a la función principal.
int main(int argc,char *argv[] ,char* envp[])h
argc 是 参数的个数。
argv是 参数表。
envp是环境表。

2 Formato de la tabla de entorno

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

3 Obtenga el código de prueba de la tabla de entorno

  1. el código se muestra a continuación:
#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. resultado de la operación:
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 Función de operación variable de entorno

  1. archivo de cabeza
#include <stdlib.h>
  1. Varias funciones relacionadas
(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 Salto no local

En el programa C, para realizar el manejo de excepciones, se necesita saltar.
Sabemos que al hacer un salto dentro de una función (salto parcial), se usa goto .
Si desea realizar un salto no local , debe utilizar la función de salto longjmp .

  1. archivo de cabeza
#include <setjmp.h>
  1. funciones relacionadas
(1) 设置非局部跳转的跳转点
int setjmp(jmp_buf env);

(2) 进行非局部跳转,val作为返回值
void longjmp(jmp_buf env,int val);
  1. Preste atención al
    parámetro env:
    (1) Tipo especial jmp_buf.
    (2) Al llamar a longjmp, almacene toda la información utilizada para restaurar el estado de la pila.
    Después del salto no local de longjmp:
    (1) Las variables globales, las variables estáticas y las variables volátiles no se pueden restaurar a sus valores originales.
    (2) Las variables de registro se pueden restaurar a sus valores originales.
    (3) La variable automática (auto) se puede restaurar a su valor original después de la compilación optimizada.

Supongo que te gusta

Origin blog.csdn.net/Kshine2017/article/details/103885567
Recomendado
Clasificación