Actividad A04.1. Manejando información con el shell

Ya hemos tenido algún indicio sobre la capacidad del intérprete de comandos de Linux para filtrar información. Por ejemplo, cuando generamos el documento del mapa del entorno de trabajo con el comando:

ls –R > Mapa_del_entorno

Probablemente en aquél momento fuiste capaz de deducir lo que significa el operador «>» para el intérprete de comandos. Eso es solo una muestra de cómo podemos manejar la información con el shell.

Qué hay que hacer

  1. Esta batería de comandos del shell te servirá tanto como autoevaluación de tu nivel de manejo con el shell como para explorar las posibilidades de este en cuanto a la entrada-salida. Sitúate en el directorio en ISO/Proyectos de tu cuenta del servidor para esta actividad. Intenta anticipar el resultado de la ejecución de cada comando de la secuencia, ayudándote del man si es preciso, y luego ejecútalo en el directorio que has creado para comprobar el efecto. Anota para cada comando si has anticipado correctamente o no el resultado. Para aquellos casos que no sepas explicar el resultado, formula lo más precisamente posible las dudas que tengas. Esto último podéis hacerlo en grupo.
  2. En clase recopilaremos y resolveremos las dudas. El profesor introducirá los conceptos de entrada-salida estándar y de filtro. Toma notas en el cuaderno.

Dedicación

En clase dedicaremos unos 30 minutos a esta actividad.

Tiempo estimado a dedicar fuera de clase: 30 minutos.

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 A04.2. Programando filtros

Hemos aprendido cómo muchos programas (a los que llamaremos filtros) se sirven de la utilización de los canales de E/S estándar. Tomaremos como ejemplo un filtro sencillo, muy parecido a cat, que llamaremos ccopiar, para comprender cómo funciona un filtro.

Qué hay que hacer

  1. Se suministra el código de ccopiar , que está desarrollado para Windows, pero, como podréis comprobar, se puede compilar para Linux. Probadlo y analizad su código. Discutid en el grupo qué tiene de particular ccopiar para comportarse como un filtro. Anotad las conclusiones y las dudas.
  2. En clase se aclararán las dudas y se discutirán las conclusiones. Toma notas.

Dedicación

En clase dedicaremos unos 30 minutos a esta actividad.

Tiempo estimado a dedicar fuera de clase: 10 minutos.

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 A04.3. Un filtro con llamadas al sistema

Sabemos que el código del programa ccopiar es compatible a nivel fuente entre Windows y Linux. Como ya conocemos, esto se debe a la utilización de la biblioteca de E/S de C. Debemos preguntarnos ahora cómo el sistema operativo Linux soporta el concepto de canal estándar en su interfaz de llamadas al sistema para que, como programadores de sistemas, podamos construir bibliotecas para lenguajes de programación y utilidades de todo tipo.

Qué hay que hacer

  1. Se suministra el código de scopiar , programado con llamadas al sistema Linux. Probadlo y analizad su código con ayuda del man. En concreto, responded a las siguientes preguntas: (a) ¿se comporta como un filtro?, (b) ¿qué llamadas al sistema usa y cómo son sus parámetros?, (c) ¿cómo se representan los canales de E/S estándar? Anotad las respuestas y las dudas.
  2. En clase se aclararán las dudas y se discutirán las conclusiones. Toma notas.

Dedicación

En clase dedicaremos unos 30 minutos a esta actividad.

Tiempo estimado a dedicar fuera de clase: 10 minutos.

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 A04.4. Manejando mensajes de error

En las actividades precedentes hemos comprobado la sencillez y versatilidad del concepto de canal estándar. Queda alguna cuestión pendiente. Por ejemplo, si en lugar de

ccopiar < fichero > nuevo_fichero

ejecutamos:

ccopiar fichero > nuevo_fichero

ccopiar debería informar de que no acepta argumentos. Este mensaje «de error» ¿por dónde lo debería escribir ccopiar?

Qué hay que hacer

  1. Modificad el filtro ccopiar de forma que detecte un número de argumentos no adecuado y escriba un mensaje de advertencia en su caso. Comprobad el funcionamiento de la nueva versión de ccopiar.
  2. Ahora, ejecutad el comando cat forzando un error:
cat fichero_inexistente > nuevo_fichero
  1. ¿Se comporta igual que vuestro ccopiar? ¿Qué tiene cat de particular con respecto a ccopiar? ¿Os parece coherente el comportamiento de cat con los conceptos de canales de E/S estándar y redirección de la E/S? Discutid estos aspectos en el grupo.
  2. En clase se discutirá sobre el modelo de Linux para el tratamiento de los mensajes de error. El profesor propondrá alguna prueba adicional. Toma notas.
  3. Modificad ccopiar y scopiar para que se comporten de acuerdo al modelo presentado.

Dedicación

En clase dedicaremos unos 30 minutos a esta actividad.

Tiempo estimado a dedicar fuera de clase: 30 minutos.

Entregables

No hay que entregar ningún documento. El código desarrollado podréis integrarlo en la utilidad que vamos a construir en la siguiente actividad. Las notas que tomes también podrás usarlas para preparar una actividad de evaluación posterior.

Evaluación

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

Actividad A04.5. Construcción de un duplicador

Ya tenemos casi todos los elementos para construir nuestro duplicador. Sabemos cómo leer por la entrada estándar y escribir por la salida estándar y por la salida de error estándar, tanto usando funciones de biblioteca como llamadas al sistema. Ahora necesitamos aprender cómo escribir por la salida adicional que necesita un duplicador.

Qué hay que hacer:

  1. Primero necesitamos conocer cómo se utilizan en Linux otros canales de entrada-salida adicionales a los estándar (sabemos que deben existir, ya que en caso contrario no se hubiera podido construir la utilidad tee). Si tenéis acceso al man investigad qué medios proporciona Linux para ello. Resumid vuestra propuesta en una lista, distinguiendo entre llamadas al sistema y funciones de biblioteca. En caso contrario el profesor os proporcionará la documentación sobre una serie de funciones relacionadas con la entrada salida. Anotad las dudas que os hayan surgido.
  2. En clase recopilaremos las propuestas de los grupos. El profesor completará el modelo de canales de entrada-salida. Revisa la lista inicial y completa en tu cuaderno las notas sobre los diferentes mecanismos de entrada-salida. En el documento resumen de canales de entrada-salida puedes encontrar el material utilizado en clase.
  3. Ahora ya podemos completar nuestro duplicador. Vamos a construir una versión con funciones de biblioteca (ctee) y otra con llamadas al sistema (stee). Primero, elaborad un documento de especificación funcional común para ambas (fijaos que funcionalmente son idénticas).
  4. Elaborad el documento para la verificación con los casos de prueba.
  5. Programad ambas versiones (ctee y stee) y verificad su funcionamiento.

Dedicación

En clase dedicaremos 30 minutos a esta actividad.

Tiempo estimado a dedicar fuera de clase: 30 minutos.

Entregables

No hay que entregar ningún documento. El código desarrollado podréis integrarlo en la utilidad que vamos a construir en la siguiente actividad. Las notas que tomes también podrás usarlas para preparar una actividad de evaluación posterior.

Evaluación

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

Actividad A04.6. Construcción de una utilidad para empaquetar archivos

La siguiente utilidad que vamos a construir es una utilidad para empaquetar archivos. La idea es reutilizar gran parte del código fuente de la utilidad stee ya desarrollada.

Qué hay que hacer:

  1. En esta actividad se trata de elaborar una utilidad de nombre (mypackzip) que guarda el contenido de de un fichero sobre otro fichero, pero utilizando un formato especial. El comportamiento de (mypackzip) debe ser el indicado en el documento de especificación que se suministra. Elaborad el documento para la verificación con los casos de prueba.

  2. Programad (mypackzip) utilizando llamadas al sistema y verificad su funcionamiento. Para verificar que el fichero generado por mypackzip es correcto 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
    

Dedicación

En clase dedicaremos 30 minutos a esta actividad.

Tiempo estimado a dedicar fuera de clase: 1h 30 minutos.

Entregables

El grupo deberá entregar los siguientes documentos:

  1. Código fuente y ejecutable de mypackzip (.tar.gz).
  2. Documentos de verificación de la utilidad (mypackzip) en formato pdf.

Evaluación

La actividad se evalúa en parte 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 documento de especificación funcional describa formalmente y con precisión el funcionamiento de la utilidad. En el apartado CEval 4 se describen los criterios de evaluación.
  2. 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.
  3. Que la utilidad cumpla los requisitos funcionales de la especificación. En el apartado CEval 8 se describe el criterio de evaluación.
  4. 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.)