Examen Agosto 2020 Problema 2 parte b

Examen Agosto 2020 Problema 2 parte b

de Rodrigo Alain De La Vega Rodriguez -
Número de respuestas: 1

Buenas, el link del examen es el siguiente: https://eva.fing.edu.uy/pluginfile.php/77323/mod_folder/content/0/2020/Solucion%20examen%20202008.pdf?forcedownload=1

En la parte b pide implementar la siguiente función:
function buscarArchivo(entradaDir directorio,char* nomArchivo):ubicacionEntrada

para lo cual en un momento dado necesita hacer una lectura de disco y para eso utiliza la función:
Procedure leerBlq(numBloque: int, var buff: bloque) : boolean

La función anterior es invocada de la siguiente forma: leerBlq(iterBloque, buff) donde buff esta definido como: var buff = [0..127] of entradaDir;

La duda que me genera esto es: por que en la firma de la función ponen un tipo de dato que no es el mismo que le pasan luego al invocar la función? Pueden explicarme como es el mapeo ese que hacen, así de esta forma puedo evitar dudar y equivocarme.

Gracias.
Saludos


En respuesta a Rodrigo Alain De La Vega Rodriguez

Re: Examen Agosto 2020 Problema 2 parte b

de Federico Rivero -
Hola!

La idea es que cuando nosotros leemos un bloque de memoria, ese bloque es un arreglo de bytes que nosotros debemos interpretar según el contenido del archivo. En este caso, como el archivo es de tipo directorio, sabemos que los datos del bloque ya están formateados como un arreglo de entradaDir. Como el bloque tiene 4KB y cada entrada dir ocupa 32 bytes, entonces en un bloque entran 128 entrada dir.

Ahora, si bien conceptualmente está bien, eso que escribimos no va a compilar en C. La forma de compilar en C sería escribir el tipo 'bloque' como byte* y luego realizar un casteo a entradaDir*. Si revisás soluciones seguramente vas a encontrar alguna escrita con esta sintaxis, pero conceptualmente es lo mismo, la idea es que un cierto arreglo de bytes se interpreta según el tipo de datos que contenga el bloque.

Avisame si persisten las dudas.

Sadudos,
Federico