El sistema de ficheros de

Anuncio
SISTEMAS OPERATIVOS 2. Enxeñería Técnica en Informática de Xestión. Curso 20062007
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 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
2. 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.
3. Un programa de nombre busca que busca los ficheros indicados en el argumento. La
búsqueda es recursiva a partir del directorio actual o del directorio indicado en el (único)
argumento. Se permiten los comodines * y ?. Cada vez que se encuentra una coincidencia el
formato de visualización debe ser el mismo que con el comando ls –l.
Ejemplos:
$busca datos.c
busca ese fichero a partir del directorio actual
$busca /usr/include/s*.h busca los ficheros que comienzan con “s” y con extensión “.h” a
partir del directorio /usr/include
4. 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
5. Un programa de nombre procesos que muestra los procesos multiprogramados, a partir de
la información en /proc.
Ejemplo:
$procesos
pid: 5436 ppid: 5401 Ejecutable: a.out
6. Implementación de un minishell que permita ejecutar los comandos anteriores.
Ejemplo:
$minishell
#ms#procesos
Además, se debe realizar lo siguiente:
A. Los programas 3, 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 o
realpath.
•
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
Hasta la última semana antes de vacaciones de Navidad, en horario de prácticas.
Descargar