Letra Taller 1 Profesorado de Informática INET, 2015 Mini File System





























































































































































































































































































































TALLER 1
PROFESORADO EN INFORMATICA  ́
INET, 2015


MINI FILE SYSTEM

Se desea construir un simulador del administrador de archivos y directorios (file system) de un sistema operativo, el cual debe implementar un conjunto de comandos básicos de manejo de archivos y directorios, con sintaxis y comportamientos similares al Sistema Operativo MS-DOS.

1 Administración de Directorios y Archivos

La estructura de directorios (conocidos como carpetas en la jerga de Windows) deberá contar con un directorio RAIZ (carpeta base), dentro del cual se podrán crear nuevos directorios y archivos. A su vez, estos nuevos directorios podrán contener también nuevos archivos y directorios, permitiendo múltiples niveles en la estructura de directorios. Haremos referencia al directorio RAIZ mediante la palabra reservada RAIZ (que ser ́a en realidad el string RAIZ), lo cual implica que no podrá existir otro directorio con ese nombre. Introducimos también la noción de directorio actual, la cual es fundamental para la ejecución de muchos de los comandos que describiremos más adelante.

Los archivos que administrar ́a esta estructura serán de texto. Un archivo es identificado por un nombre, cuyo largo no puede exceder 15 caracteres. Los caracteres válidos tanto para el nombre como para la extensión serán de tipo alfanumerico {a,b,c,...,z — 0...9}. La extensión es de 3 caracteres. Cabe destacar que los directorios serán identificados con un nombre, cuyo largo no podrá ex-ceder de 15 caracteres alfanumericos. Pueden existir un archivo y un directorio con el mismo nombre en la misma ubicación. Además los archivos tienen un atributo que identifica si se trata de un archivo de lectura/escritura o de lectura solo. Los directorios no poseen este atributo.

A continuación se describirán las operaciones del sistema que deberá implementar. En cualquier caso en que la ejecución de una operación no sea satisfactoria no se debe modificar el sistema y se deberá notificar el error.


Ejemplo:

RAIZ

            | directorio1

                        | | archivo11

                        | | archivo12

                        | | directorio11


            | directorio2

                            | | archivo21

             | archivo31

directorio1 es un directorio que contiene 2 archivos, archivo11 y archivo12 y un subdirectorio directorio11.

directorio2 es un directorio que contiene un archivo, archivo21.

• archivo31 se encuentra dentro del directorio RAIZ.

el directorio actual está subrayado y es directorio1


El sistema debe permitir realizar las siguientes operaciones:

1.1 OPERACIONES GENERALES

1.1.1 COMANDO CREARSISTEMA

Sintaxis: crearsistema

Inicializa el sistema para que contenga unicamente al directorio RAIZ, sin subdirectorios ni archivos. Este comando será usado al comienzo de la ejecución del programa (set de pruebas) que simule una sesión del file system.

1.1.2 COMANDO DESTRUIRSISTEMA

Sintaxis: destruirsistema

Destruye el sistema, liberando la memoria asignada a las estructuras de datos que constituyen el file system. Este comando será usado al final del programa (set de pruebas) que simule una sesión del file system.



1.2 OPERACIONES RELATIVAS A LOS DIRECTORIOS

1.2.1 COMANDO MKDIR

Sintaxis: mkdir directorio

Este comando crea un nuevo subdirectorio (vacio) del directorio actual. Por ejemplo, si el sistema se encuentra posicionado en el directorio ”directorio1”

RAIZ

        | directorio1

y se ejecuta mkdir directorio11 el resultado será:

RAIZ

    | directorio1

            | directorio11

Como convención establecemos que en un directorio no podrán existir dos subdirectorios con el mismo nombre y no se podrá indicar como nombre de un directorio ”RAIZ”.

1.2.2 COMANDO RMDIR

Sintaxis: rmdir directorio

Este comando elimina un subdirectorio hijo del directorio actual. Por ejemplo, si el sistema se encuentra en la situación del ejemplo anterior, posicionado en el directorio directorio1, y se quiere eliminar el subdirectorio directorio11, el comando y el resultado de la ejecución de este deberían ser los siguientes:

rmdir directorio11

RAIZ

    | directorio1

Como convenciones, establecemos que:

• Al eliminar un directorio se eliminarán todos sus subdirectorios junto con los archivos correspondientes independientemente de sus condiciones de Lectura/Escritura. Si el directorio no existe,  ́esto se debe indicar con un mensaje.

• El directorio RAIZ no podrá ser eliminado.


1.2.3 COMANDO CD

Hay tres posibilidades:

Sintaxis 1: cd directorio

Sintaxis 2: cd ..

Sintaxis 3: cd RAIZ

Este será el ”único” comando que nos permitir ́a desplazarnos en la estructura de directorios. Por ejemplo, considerando la estructura del ejemplo inicial, si nos encontramos en el directorio ”directorio1” y queremos movernos al directorio ”directorio11” hacemos:

cd directorio11

De esta manera, el directorio actual pasará a ser ”directorio11”. Como convención establecemos que solamente se podrá mover a un directorio hijo del directorio actual (no se puede bajar varios niveles en la estructura con la ejecución de un único cd).

Ahora, si deseamos volver al directorio ”directorio1” o, en general, al padre del actual (siempre que el actual no sea el directorio RAIZ) hacemos cd ..

Si el directorio actual es el raiz y hacemos cd .. no se cambia de directorio. Se debe poder regresar al directorio RAIZ desde cualquier otro directorio, para ello utilizaremos la sintaxis cd RAIZ.

En la sintaxis 1, se debe desplegar un mensaje de error si el directorio no existe.

1.2.4 COMANDO DIR

Considere las siguientes posibilidades:

Sintaxis 1: dir

Este comando muestra el contenido del directorio actual, ya sean subdirectorios o archivos.

Sintaxis 2: dir directorio

Este comando muestra el contenido del directorio indicado, que debe ser un subdirectorio del directorio actual. Si el subdirectorio no existe debe indicarlo con un mensaje.

Sintaxis 3: dir ..

Este comando muestra el contenido del directorio padre del actual. Si el directorio actual es el raiz indica el directorio padre no existe.

En los casos de la Sintaxis 1, 2 y 3, se muestra el contenido del directorio que corresponde sin mostrar el contenido de sus subdirectorios.


Como convenciones establecemos que:

• El comando dir realizará un listado de la información contenida en el directorio que corresponda.

• Serán listados los archivos, en orden alfabético creciente, y posteriormente los directorios también en orden alfabético. Para los archivos, el orden será determinado sobre el string del nombre y la extensión.

• El formato de salida debe ser exactamente igual al del ejemplo abajo. Si se trata de un archivo, luego del nombre completo irá el atributo ”lectura” o ”lectura/escritura” (según el caso).





Consideremos el siguiente ejemplo:

RAIZ

        | directorio1

|                  archivo11

|                  archivo12

|                  directorio11

|      archivo111

|

|     directorio2

|                 archivo21

|                 archivo31

Si hacemos dir directorio1 se desplega:

archivo11 lectura

archivo12 lectura/escritura

directorio11

1.3 OPERACIONES RELATIVAS A LOS ARCHIVOS

1.3.1 COMANDO CREATEFILE

La sintaxis es la siguiente:

Sintaxis: createfile archivo

Este comando crea un nuevo archivo en el directorio actual. Por ejemplo, suponiendo que contamos con la estructura anterior y el directorio actual es ”directorio11”, si ejecutamos los siguientes comandos:

createfile archivo2

dir

el resultado deberá ser:

archivo111 lectura

archivo2 lectura/escritura

Como convenciones establecemos que en su creación:

• Todos los archivos serán de lectura/escritura.

• El contenido de los archivos será vacío.

• No se permitirá crear un archivo con el nombre y extensión de uno ya existente en el directorio actual.

1.3.2 COMANDO DELETE

La sintaxis es la siguiente:

Sintaxis: delete archivo

Este comando elimina un archivo del directorio actual, siempre y cuando exista y no sea de sólo lectura. Por ejemplo, si deseamos eliminar el archivo creado anteriormente:

delete archivo2

dir

se muestra:

archivo111 lectura

debe indicarse si no existe el archivo o si existe pero es solo de lectura (en este último caso no debe borrarse).

1.3.3 COMANDO ATTRIB

La sintaxis es la siguiente:

Sintaxis 1: attrib archivo +w

Sintaxis 2: attrib archivo -w

Este comando cambia los atributos de un archivo perteneciente al directorio actual. Por ejemplo, retomando la estructura del último ejemplo y considerando que el directorio actual es ”directorio11”, si deseamos que el archivo ”archivo111” sea de lectura/escritura, escribimos:


attrib archivo111 +w

De la misma manera, podremos re establecerlo a lectura ejecutando el comando inverso:

attrib archivo111 -w 


debe indicarse si no existe un archivo con el nombre indicado. Si se indica como modo el actual no se realiza ningún cambio.

1.3.4 COMANDO IT

La sintaxis es la siguiente:

Sintaxis: it archivo texto

Agrega un texto al comienzo del archivo con nombre dado. No deberá sobrepasar el largo total TEXTO MAX. El archivo debe existir en el directorio actual. Continuando con el ejemplo anterior, si el directorio actual es directorio1, se estableció el valor de la constante TEXTO MAX en 50 y el archivo archivo11 es de lectura/escritura, el comportamiento esperado al ejecutar los siguientes comandos es (el comando TYPE, que muestra el contenido de un archivo, se describe más adelante): 

it archivo11 ”Los peces del estanque son azules y naranjas”

type archivo11

Los peces del estanque son azules y naranjas

Si ejecutamos los siguientes comandos

it archivo11 ”Contemplemos los peces del estanque son azules y naranjas.”

type archivo11

se despliega:

Contemplemos los peces del estanque son azules y

1.3.5 COMANDO TYPE

La sintaxis es la siguiente:

Sintaxis: type archivo

Imprime el contenido del archivo parámetro, independientemente de su condición de Lectura/Escritura. Debe indicarse si no existe el archivo en el directorio actual.


1.4 SOBRE LOS CHEQUEOS

Se permite considerar que la sintaxis de la entrada que recibirá el programa es válida. Esto quiere decir que no se requiere la realización de chequeos como los siguientes:

• Nombres de largo superior al especificado en la letra del obligatorio.

• Formatos inválidos para nombres de archivos, directorios o rutas.

• Parámetros inválidos para comandos tales como CD, DIR o ATTRIB.

Esto no quiere decir que no se deban chequear las condiciones establecidas para los comandos en la letra del obligatorio. Por ejemplo, creación de un directorio ya existente, supresión de un archivo inexistente, entre otros.

1.5 ENTREGAS y AMBIENTE

Se debe utilizar como lenguaje de programación C++ con el IDE Codblocks (se puede bajar de www.codeblocks.org/downloads). Se sugiere bajar: codeblocks-13.12mingw-setup.exe (en caso de usar plataforma WINDOWS)

Habrá tres

1. Diseño: deben indicarse tipos abstractos de datos (modelo de datos y operaciones), representación, prototipos de las operaciones sobre las representaciones y sus precondiciones. Fecha de entrega: 15/9/2015.

2. Implementación: implementación de las operaciones. Fecha de entrega: 13/10/2015.

3. Informes finales: manual de usuario, manual de diseño, juego de datos. Se publicará fecha. 
Los grupos deben asistir a las tutorías presenciales prefijadas con su tutor yes obligatoria la asistencia.

Las entregas serán realizadas a los profesores designados como tutores vía e-mail y en formato impreso. Este último debe ser igual al entregado por e-mail y puede realizarse en la siguiente reunión después de la fecha de entrega indicada.

Todo email que se envíe a los profesores debe enviarse también a la dirección: taller1.anio.2015@gmail.com

Se sugieren los siguientes libros de consulta:

• Estructuras de datos y algoritmos. Mark Allan Weiss

• Estructuras de datos y algoritmos. Aho, Hopcroft, Ullman.

• Cómo Programar en C, C++. Deitel and Deitel.

























































































































































































































































































































Comments