[Examen Dic-2016] Problema 2 (INODOS)

[Examen Dic-2016] Problema 2 (INODOS)

de Enrique Galasso Gonzalez -
Número de respuestas: 1

Estimados, tres dudas en la solución de la función:

Function buscarInodo(c: array of char; var inodo_num: int) : boolean

1) hacen referencia a una variable tipo string llamada "resto".

De hecho interviene en una condición del IF:

 if (entry_idx >= 0) {            

          if (!bloque[entry_idx].es_dir && resto!="") {

La idea es que en este momento se está evaluando el que haya encontrado una entrada valida.

Me imagino que la presencia en la condición del IF del "resto" es evaluar que si aun existe "resto" en el camino

pero la entrada NO es un directorio, retorno FALSE (es decir, controla q no se haya metido un archivo en el medio del camino).

Ahora, en algun lugar ese "resto" tendría que habersele asigando el "resto" del camino, ¿no?

2) El hacer un return FALSE cuando la función leer (que lee los datos del disco) devuelve FALSE,

¿es debido a que si no pudo leer asumo que hay problemas en ese bloque y por ende no debería continuar?

3) Cuando define la variable "bloque", lo hacen como un arreglo de entrada_dir de tamaño 8. Ahora, ese "bloque" debería ser un arreglo de tamaño 8 pero de 1024 bytes. Entre otras cosas porque la función leer, no tendría donde leer  ¿no? 

(disculpen que es casi obvio lo que estoy planteando pero a esta altura no quiero rifarme ni las dudas obvias) 



En respuesta a Enrique Galasso Gonzalez

Re: [Examen Dic-2016] Problema 2 (INODOS)

de Gustavo Brown -

Enrique,

  1) Donde dice "resto" debió decir "camino" que es la variable que mantiene lo que queda del camino por procesar

  2) La letra dice que la función leer devuelve false si hubo algun problema. En ese caso no se puede continuar y por eso retorna false.

 3) La variable bloque está definida como un arreglo de 8 entrada_dir. Cada entrada_dir ocupa 128 bytes. Las reglas de disposición de variables en memoria dice que si tenés un arreglo de elementos éstos se disponen contiguos. Por lo tanto un arreglo de 128 bytes ocupa 128*8=1024 bytes que es el tamaño de bloque. La llamada a leer efectivamente va a leer 1 bloque de 1024 bytes y va a colocar la información a partir del primer byte de bloque[0], terminando en el último byte de bloque[7].

Saludos,
  Gustavo