Introducción a los Sistemas Operativos, Ing. Informática, UPV/EHU


Proyecto P06. Cómo gestionar los directorios

En las tareas previas ya hemos estado trabajando con utilidades o comandos que nos permiten gestionar ficheros. Los directorios son también ficheros, pero de un tipo especial. ¿Cómo implementamos entonces un comando como ls? o ¿Cómo podemos crear un directorio? Para poder implementar este tipo de utilidades es necesario que entendamos cómo es internamente un directorio y como se pueden obtener las propiedades de los ficheros de un directorio .

Vamos por tanto a explorar las funciones para gestión de directorios y las funciones para obtener las propiedades de los ficheros, centrándonos en las que ofrecen la interfaz de llamadas al sistema de Linux y la biblioteca estándar de C.

Actividad A06.1. Construir un comando similar a ls

Vamos a construir una primera versión de la utilidad mi_ls, que nos debe mostrar el contenido de un directorio.

Qué hay que hacer

  1. En el grupo, obtener información en el man sobre cómo obtener el contenido de un directorio mediante funciones de la biblioteca estándar de C. Elaborad una lista con las funciones con sus particularidades. ¿Qué estructuras de datos se utilizan para representar los directorios y su contenido? Ahora intentad encontrar las funciones de la interfaz de llamadas al sistema (de Linux) equivalentes a las previas. Para terminar de entender cuál es el contenido de un directorio os resultará ilustrativo ejecutar el comando ls –ai dir1 : ¿se corresponde el resultado del comando con el contenido del directorio dir1? (Ya explicado en clase por el profesor)
  2. A continuación, con la supervisión del profesor, cada grupo expone sus conclusiones y se discute sobre las mismas. Como resultado del debate se debe obtener una tabla con las funciones ofrece la biblioteca estándar de C, las funciones equivalentes que ofrecen Linux y las estructuras de datos necesarias para gestionarlos. (Ya explicado en clase por el profesor)
  3. Programad la utilidad mi_ls según especificación proporcionada por el profesor utilizando las funciones de la biblioteca estándar de C. Verificad el funcionamiento correcto de la utilidad y comparad sus resultados con los obtenidos mediante el comando ls –i dir1 . Anotad las conclusiones sobre las diferencias obtenidas en la ejecución de las dos aplicaciones. (Ya explicado en clase por el profesor)
  4. Completa la tabla de las funciones de gestión de directorios con otras funciones que ofrece Linux y la biblioteca estándar de C para poder implementar comandos como: crear un directorio, eliminar un directorio y posicionarse en un directorio (comando cd ). Repartíos el trabajo y luego os contáis lo que habéis encontrado. Añade la tabla completa a tu cuaderno. (Ya explicado en clase por el profesor)

Dedicación

En clase dedicaremos 1 hora a esta actividad.

Tiempo estimado a dedicar fuera de clase: 1 hora y 20”.

Entregables y Evaluación

Ninguno. Esta primera versión se utilizará como base para la próxima actibvidad

La actividad se evalúa en una actividad de evaluación posterior.

Actividad A06.2. Construir un comando similar a ls -al

Vamos a dotar de mayor funcionalidad a nuestro comando mi_ls. En los sistemas Windows, el comando dir permite obtener las propiedades de los ficheros de un directorio. El comando equivalente de Linux, ls, si no se lo indicamos explícitamente, solo nos proporciona la lista de nombres. Como hemos comprobado, esto se entiende por la diferente representación que ambos sistemas hacen de los directorios.

En la actividad previa ya hemos elaborado el código de un ls simplificado que no admite opciones. Ahora queremos modificarlo para que se comporte como el dir de Windows. La nueva utilidad mi_ls para Linux funcionará de acuerdo a la especificación (sin completar) que el profesor nos proporciona.

Qué hay que hacer

  1. Cada grupo explora en el man y determina las llamadas al sistema necesarias para implementar esta utilidad, resaltando las propiedades de los ficheros que habéis observado. Anotad tanto las llamadas al sistema como las propiedades en vuestro cuaderno, explicando su significado. Anotad también las dudas que os hayan surgido. (Ya explicado en clase).
  2. El profesor pedirá a un miembro de cada grupo que exponga los resultados de su exploración. Se debate sobre las llamadas al sistema a utilizar y se resuelven las dudas sobre su uso y las propiedades encontradas. El profesor resumirá la estructura de los directorios y cómo se almacenan las propiedades de los ficheros. Actualiza tus notas.(Ya explicado en clase).
  3. Completad el documento de especificación funcional proporcionado y actualiza el documento para la verificación del nuevo mi_ls, con los casos de prueba a partir de la especificación.
  4. En clase veremos los un ejemplo de código C de cómo mostrar algunas de las propiedades de un fichero contienido en un directorio. A partir de ese ejemplo, programad la utilidad utilizando el lenguaje C y las llamadas al sistema acordadas y verificad su funcionamiento.

En el documento Material P06 se encuentra parte del material utilizado en clase por el profesor.

Dedicación

En clase dedicaremos 1 hora y 10” a esta actividad.

Tiempo estimado a dedicar fuera de clase: 1 horas y media.

Entregables

Ninguno. Esta primera versión se utilizará como base para la próxima actibvidad

La actividad se evalúa en una actividad de evaluación posterior.

Evaluación

El código desarrollado en esta utilidad lo reutilizarás para construir el proyecto de E/S. por tanto, su evaluación se realizará en una actividad de evaluación posterior.

Actividad A06.3. Proyecto mypackzip: Actualizar la función de inserción y extracción con directorios

Vamos a ampliar la utilidad mypackzip para que trabaje con directorios. Crea las funciones de insertar_directorio y extraer_directorio sobre un fichero empaquetado con la utilidad mypackzip creamos en el proyecto 5 .

Qué hay que hacer:

  1. Completad la especificación parcial de la funcionalidad de añadir directorio con la funcionalidad que creas más conveniente.
  2. Elaborad el documento de verificación con los casos de prueba que consideréis necesarios.
  3. Como ya hemos comentado en la actividad A05.3, queremos desarrollar nuestra utilidad mypackzip de forma incremental. Diseña la interfaz de la función anadir_directorio(…) indicando cuales serán los argumentos y su valor de retorno. Ten en cuenta que anadir_directorio(…) se va a aplicar sobre un fichero en formato mypackzip.
  4. Programad anadir_directorio(…) , añadid su función a mypackzip y verificad su funcionamiento. Nota: Se recomienda utilizar la función insertar fichero(…) ya programada.
  5. Repetid los pasos previos, pero esta vez para ampliar mypackzip con la funcionalidad con de extraer_directorio(…) similar a la utilidad extraer_fichero(…). Aquí os proporcionamos la especificación funcional de extraer_directorio. Nota: Se recomienda utilizar la función extraer fichero(…) ya programada.

Dedicación

En clase dedicaremos media hora a este proyecto.

Tiempo estimado a dedicar fuera de clase: 2 horas.

Entregables

El grupo deberá entregar los siguientes documentos:

  1. Ficheros fuente y ejecutable de mypackzip (.tar.gz).

  2. Documentos de especificación y de verificación de las dos funcionalidades (anadir_directorio(…) y extraer_directorio(…) ) en formato pdf.

    Para verificar que las dos funcionalidades generan los ficheros de forma correcta puedes utuilizar el comando hexdump de Linux, que realiza un volcado del contenido de un fichero en la salida estandar en formato hexadecimal. Por ejemplo:

    hexdump  -C  fichero.myzip
    

Evaluación

El código desarrollado en estas dos utilidades lo reutilizarás para construir el proyecto de E/S. por tanto, su evaluación se realizará en una actividad de evaluación posterior.

No obstante, puedes revisar los criterios que se utilizarán para evaluar este código en el proyecto.

Los criterios de evaluación son los siguientes:

  1. Que el código desarrollado sea razonablemente eficiente y esté expresado de forma clara y estructurada. En el apartado CEval 8 se describe el criterio de evaluación del código.
  2. Que la utilidad cumpla los requisitos funcionales de la especificación. En el apartado CEval 8 se describe el criterio de evaluación.
  3. Calidad de la verificación a través del documento de verificación. En el apartado CEval 9 se describe el criterio de evaluación.

No olvides rellenar la encuesta de dedicación de este proyecto. (Encuesta de Dedicación.)