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


Proyecto P05. Rompiendo la secuencialidad de la entrada-salida

Las formas de entrada-salida que conocemos por ahora nos permiten tratar la información secuencialmente de acuerdo a la idea de flujo de información. Supongamos ahora que queremos acceder a unos datos situados en medio de un fichero o insertar trozos de datos en ciertas posiciones concretas de un fichero. En este proyecto vamos a construir varias utilidades para Linux, que nos permitan realizar ciertas ese tipo de operaciones sobre ficheros:

  • Insertar un texto en un fichero
  • Extraer un determinado fichero de otro fichero con formato empaquetado
  • Insertar un fichero en otro fichero con formato empaquetado
  • Otras …

Actividad A05.1. Programando insertar con el shell

Vamos a comenzar con un ejemplo de insertar un texto en el interior de un fichero

insertar fichero posicion_donde_insertar texto_a_insertar

de acuerdo a esta especificación incompleta .

La primera versión de la utilidad insertar la construiremos mediante comandos del shell. Las redirecciones nos serán útiles, pero además necesitaremos herramientas específicas.

Qué hay que hacer

  1. Primero debemos explorar las herramientas que nos ofrece el shell para poder construir la utilidad insertar. Discutid en el grupo qué tipo de herramientas os serían útiles y luego buscad en internet o directamente en el man si Linux ofrece lo que necesitáis. Con las herramientas encontradas, describid el enfoque a seguir para construir la utilidad y las herramientas a utilizar.
  2. En clase se discutirán los enfoques adoptados por cada grupo. Tomad notas y corregid vuestro enfoque en caso necesario.

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

Dedicación

En clase dedicaremos 40” a esta actividad.

Tiempo estimado a dedicar fuera de clase: 30” .

Entregables

No hay que entregar ningún documento, pero las notas que tomes podrás usarlas para preparar una actividad de evaluación posterior.

Evaluación

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

Actividad A05.2. Programando insertar en C

Ahora vamos a programar en C una segunda versión de la utilidad insertar.

Qué hay que hacer:

  1. Primero necesitamos conocer qué herramientas proporciona Linux para romper el orden secuencial en el acceso a un fichero. El profesor os proporcionará información sobre cómo se puede acceder de forma no secuencial (directa) utilizando llamadas al sistema.
  2. En grupo idead un algoritmo que nos permita implementar la utilidad insertar. En clase recopilaremos las propuestas de los grupos.
  3. Probad la utilidad insertar utilizando llamadas al sistema (sinsertar) y verificad su correcto funcionamiento.

Dedicación

En clase dedicaremos 40 minutos a esta actividad.

Tiempo estimado a dedicar fuera de clase: 1 hora.

Actividad A05.3. Proyecto mypackzip: Construir utilidades de inserción y extración de ficheros

Ahora vamos a añadir las funciones de extraer_fichero e insertar_fichero a la utilidad mypackzip de la actividad A04.6.

Qué hay que hacer:

  1. Ya hemos visto cómo acceder a una determinada posición de un fichero para leer o escribir un texto. Utilizando la misma técnica, vamos a ampliar la funcionalidad de mypackzip para que pueda extraer un fichero a nuestro fichero en formato mypackzip. Os proporcionamos la especificación de extraer_fichero , que os indica cómo debe de funcionar. Comenzad elaborando el documento para la verificación con los casos de prueba que consideréis necesarios.
  2. Queremos desarrollar nuestra utilidad mypackzip de forma incremental, para ello, en su desarrollo aplicaremos un modelo de programación estructurada. Diseña la interfaz de la función extraer_fichero(…) indicando cuales serán los argumentos y su valor de retorno. Ten en cuenta que la función extraer_fichero(…) se va a aplicar sobre un fichero en formato mypackzip.
  3. Programad la función (extraer_fichero(…)) utilizando llamadas al sistema para utilizarla en en el código fuente la utilidad mypackzip y verificad su correcto funcionamiento tal y como indica el documento de verificación que habéis elaborado. Os recomendamos que incluyáis el código de la función (extraer_fichero(…)) en un fichero fuente separado del que contiene la función main() (p.e. en extraer_fichero.c) y que utilicéis la técnica de compilación separada que ya hemos visto en la actividad A03.4.
  4. Repetid los pasos previos, pero esta vez para implementar la funcionalidad de insertar_fichero. Aquí os proporcionamos la especificación funcional de insertar fichero.

Dedicación

En clase dedicaremos 1 hora y media 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 verificación de las dos funcionalidades (extraer_fichero() e insertar_fichero()) 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.)