SISTEMAS OPERATIVOS II
Tercer curso Ingeniería Informática. Curso 2007-2008
Práctica 3: Procesos en UNIX: Entorno, credenciales
Continuar la codificación de un intérprete de comandos (shell) en UNIX. Al igual que en la
práctica anterior
- los argumentos entre corchetes [] son opcionales.
- Los argumentos
separados por | indican que debe ir uno u otro, pero no ambos simultaneamente.
- Cuando el shell no pueda ejecutar una acción por algún motivo, debe indicarlo con un
mensaje como el que se obtiene con sys_errlist[errno] o con perror()
- El shell no debe dilapidar memoria. La memoria que se asigna (con malloc()) y deja de
utilizarse debe ser liberada.
- La información que se nuestra en pantalla no debe incluir en ningun caso líneas en blanco.
- El shell leerá de su entrada estándar y escribirá en su salida estándar, de manera que
podría ser ejecutado un archivo de comandos invocando el shell con su entrada estándar
redireccionada a dicho archivo.
- entorno -m|-e
- Muestra la lista de todas las variables de entorno accediendo
mediante el tercer argumento de main() (-m) o mediante la variable externa environ (-e). 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
de la variable e[i] como puntero) y la dirección de memoria donde se almacena el puntero
(&e[i]).
- entornos
- Muestra 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
#entorno -m
......
.......
.......
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
#entornos
20a34->environ=ffbefc44 | ffbefc24->env=ffbefc44
#
- 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 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).
- put -e|-a|-p var valor
- Establece el valor de la variable de entorno
var a valor accediendo a ella mediante environ (-e), el tercer argumento de
main (-a) o la función de librería putenv. Si la variable no existe no la creará
(informará de ello), salvo que se haya especificado que se haga mediante puntenv, entonces
será creada.
- sus -e|-a var nue=val
- Sustituye de la variable de entorno
var por nue=val accediendo a ella mediante environ (-e) o el tercer argumento de
main (-a). Si la variable var no existe informará de ello.
- $$
- modificar el comando exec y la ejecución en primer y segundo plano
(com y com &) para que la ejecución sea en un entorno alternativo. El formato es
[exec] pri [lista_variables] ej [args] [&]
donde
- Si no se especifica lista_variables se entenderá que la ejecución es mediante
execv. Lista variables puede contener solamente nombres de variables (en este caso
su valor se obtiene de environ) o cadenas de la forma nombre_variable=valor (en este
caso la variable no tiene por que existir previamente). El programa se ejecutará con un entorno
que contiene UNICAMENTE las variables de la lista, usando para ello execve. Si como lista
indicamos la cadena 'ENTORNOVACIO' el programa se ejecutará con un entorno vacio.
- Como en la práctica anterior, al ejecutable podrá pasársele un número variable de
argumentos y además debe residir en uno de los directorios de la ruta de búsqueda o
especificarse la trayectoria hasta él comenzando por /, ./ o ../
ejemplos
# xterm -e ksh &
# exec @10 TERM DISPLAY HOME HZ=120 N=65 ./a.out arg1 arg2
# @10 TERM DISPLAY HOME USER NUEVA=PRUEBA /usr/bin/xterm -hold -e ./a.out &
# ENTORNOVACIO ./a.out
Las variables no tienen por que ir en mayúsculas, la primera cadena que no sea una variable (y se
sabe que es una variable si existe en environ o es una cadena en la forma cad1=cad2) es el
ejecutable
- creds
- Muestra las credenciales del proceso (reales y efectivas, de usuario y de
grupo). Para cada credencial muestra el valor numérico y el login (o nombre del grupo) asociado.
- setuid [-l] [uid]
- Establece la credencial efectiva de usuario a id. Si se especifica
-l se entiende que uid es un login en caso contrario es el valor numérico de una
credencial.
Información detallada de las llamadas al sistema y las funciones de la librería
debe obternerse con man (execve, getenv, putenv, setuid, chmod..)
FORMA DE ENTREGA
Como en prácticas anteriores
FECHA DE ENTREGA VIERNES 23 MAYO 2008