SISTEMAS OPERATIVOS II

Tercer curso Ingeniería Informática. Curso 2005-2006

Práctica 3: Procesos en UNIX. Entorno Añadir al intérprete de comandos de comandos de la práctica anterior los siguientes comandos.

ent -m|-e
Muestra la lista de todas las variables de entorno. Para cada variable de entorno muestra, en una misma línea la variable (nombre=valor), la dirección de memoria donde se almacena la variable (el valor del puntero, e[i]) y la dirección de memoria donde se almacena el puntero (&e[i]). El acceso será mediante environ o mediante el tercer argumento de main según se indique -e o -m. Ha de especificarse ebligatoriamente -e o -m. ADEMÁS, en cualquiera de los dos casos debe mostrase el valor (como punteros) del tercer argumento de main y de environ así como las direcciones de memoria donde están almacenados el tercer argumento de main y environ. Ejemplo

$ent -e
......
.......
.......
ffbefcb8->env[29]=(ffbeff86) PATH=/usr/bin:/usr/local/bin:
ffbefcbc->env[30]=(ffbeffa5) LC_MONETARY=es
ffbefcc0->env[31]=(ffbeffb4) LC_COLLATE=es
ffbefcc4->env[32]=(ffbeffc2) _INIT_NET_STRATEGY=none
ffbefcc8->env[33]=(ffbeffda) _=./entorno
20a34->environ=ffbefc44 | ffbefc24->env=ffbefc44  | ffbefc20->argv=ffbefc3c
$

set -e|-m var valor
Establece el valor de la variable de entorno var. Si se indica -m el acceso a las variables será mediante el tercer argumento de main, si se indica -e mediante environ. Si la variable de entorno no existe no la crea. NO DEBE USARSE por tanto las funciones de librería setenv ni putenv. El acceso será usando los punteros de environ o del tercer argumento de main().
put var=valor
Establece el valor de la variable de entorno var. Usa la función de librería putenv. Si la variable no existe la crea.

get var1, var2 ...
Devuelve los valores de las variables de entorno var1, var2 .. obtenidos mediante el tercer argumento de main, environ y la función de librería getenv. Para cada caso imprime, además el la variable, la dirección de memoria donde está la variable (su valor como puntero) y la dirección donde se almacena el puntero (salvo en el caso de obtenerla con getenv).

$get TERM
   3er arg: "TERM=vt100" (ffbeff7b) puntero -> ffbefcd8
   environ: "TERM=vt550" (   2692a) puntero ->    21fb0
   getenv:       "vt550" (   2692f)
$

 $$
ejecucion con entorno cambiado Modificar la ejecución sin crear proceso (comando exec) así como las ejecuciones en primer y segundo plano de la práctica anterior para que pueda especificarse una lista de variables de entorno que constituirán el nuevo entorno del proceso. Así donde com sigue representando un ejecutable y sus parámetros. Debe usarse la llamada execve para especificar el entorno. La lista de variables de entorno contiene sólo los nombres de las variables de entorno, no sus valores, que deben obtenerse de environ. Si la lista esta vacía tendremos la ejecución con execv de la práctica anterior. (pista: no hay que hacer funciones nuevas, sólo modificar una de la practica anterior, no hay que asignar memoria ni copiar cadenas). Ejemplos

 
#xterm -e csh &
#DISPLAY HOME TERM HZ xterm -e csh &
#exec ./a.out
#exec LANG USER HOME DISPLAY ./a.out

Información detallada de las llamadas al sistema y las funciones de la librería debe obternerse con man (exec, getenv, putenv...)

FORMA DE ENTREGA Va a ser utilizado el servicio de recogida de prácticas suministrado por el Centro de Cálculo de esta Facultad y parte del proceso de corrección de las prácticas va a ser automtico (compilación, listado de practicas entregadas etc) por lo cual deben entregarse exactamente como se indica a continuación:

FECHA DE ENTREGA VIERNES 5 MAYO 2006