SISTEMAS OPERATIVOS 2

Anuncio
SISTEMAS OPERATIVOS 2. Enxeñería Técnica en Informática de Xestión. Curso 20052006
PRACTICA 1: El sistema de ficheros de UNIX.
Se deben desarrollar los siguientes ejecutables, codificados en lenguaje C, haciendo uso de las
llamadas al sistema necesarias:
1. Un programa de nombre modo que visualiza en pantalla los permisos y el tipo de uno o
varios ficheros. El formato de visualización es el mismo que con el comando ls –l.
Ejemplo:
$modo tmp
tmp: drwxr-xr-x
2. Un programa de nombre permisos que sirva para cambiar los permisos de un fichero o
ficheros. El formato será el siguiente: permisos máscara fichero.
Ejemplo:
$permisos rw-r--r-- *.c
3. Un programa de nombre mover que permite renombrar un fichero. La sintaxis es la
siguiente: mover origen destino. Se debe comprobar que no existe previamente el fichero
destino.
4. Un programa de nombre mils que visualiza en pantalla los ficheros de un determinado
directorio. El formato de visualización debe ser el mismo que con el comando ls –l (no se
implementa, por tanto, recursividad de acceso a subdirectorios).
5. Un programa de nombre usuarios que muestra la lista de usuarios definidos en el sistema.
Ejemplo de formato:
$usuarios
Usuario:
root
UID: 0
GID: 0 root
Directorio inicial: /
Intérprete de comandos: /bin/sh
Usuario:
pitufo
UID: 406
GID: 6 users
Directorio inicial: /home/pitufo
Intérprete de comandos: /bin/bash
Además, se debe realizar lo siguiente:
A. Los programas 1, 4 y 5 deben tener la opción de redireccionar la salida estándar a un
fichero pasado como argumento tras el símbolo “=”, usando la llamada al sistema dup().
B. Realizar una compilación separada con la ayuda de la utilidad make.
C. Implementar una librería estática y una librería dinámica con las funciones comunes a
dos o más programas individuales. Realizar las compilaciones de los ejecutables
incorporando el código de las librerías.
Comentarios
•
Para acceder a los directorios en UNIX se utilizarán las funciones de la librería que utilizan
la estructura dirent. (man directory y man dirent para obtener información).
Las entradas de directorio tienen tamaño variable, y su formato es:
Número inodo
(4 bytes)
Longitud entrada
(2 bytes)
Longitud nombre
(2 bytes)
Nombre (terminado en
'\0' hasta una longitud
múltiplo de 4) (variable)
Para obtener la información de los ficheros se usarán las llamadas al sistema stat, fstat y
lstat. La sintaxis de estas llamadas es:
stat (pathname, &statbuf);
fstat (df, &statbuf);
lstat (pathname, &statbuf);
pathname es el nombre de un fichero, df es un entero descriptor de fichero y statbuf es una
variable de tipo estructura stat que se encuentra declarada en el header <sys/stat.h>.
Los ficheros cabecera correspondientes a las llamadas antes citadas son <dirent.h> y
<sys/stat.h>.
•
Para ver el valor de un link simbólico puede utilizarse la llamada al sistema readlink().
•
Para consultar las entradas de /etc/passwd: getpwent, setpwent, endpwent, getpwnam y
getpwuid. Existen llamadas análogas para el fichero /etc/group.
•
El cometido del comando make es realizar una compilación condicional, actualizando los
ficheros ejecutables a partir de los ficheros de los que dependen, si es necesario debido a
cambios en estos últimos. Esta tarea la lleva a cabo aprovechando la información de dos
fuentes:
- la descripción de dependencias y vínculos, y de las acciones suministradas por el usuario,
dentro de un fichero Makefile.
- las fechas de las últimas modificaciones de los ficheros.
Fecha de entrega
Semana del 28/11 al 2/12, en horario de prácticas.
Descargar