Me quedo clarisimo.
En cuanto a puntos a la hora de correjir.
Si yo implemento esto para las solucion del problema 1 parte practica (3) copiar
http://www.fing.edu.uy/inco/cursos/sistoper/examenes/2011/Sol2011MAR.pdf
viod cpFile(......){
ok=false;
int index_dest=-1;
for(int i=0; i< max_files_on_dir;i++){
if (!d_target[i].used) index_dest=i; // busco dir_entry_libre
if(d_target[i].used && (d_target[i].type=="file") && (d_target[i].file_name==name_t) && (d_target[i].file_ext==ext_t){ //busco_si_esta_dest
ok=false;
return; //ERNO_FILE_EXIST
}
if(d_source[i].used && (d_source[i].type=="file") && (d_source[i].file_name == name_s) && (d_source[i].file_ext==ext_s) { //busco_source
if (index_dest=-1){//si no encontre un dir_entry libre sigo buscando
for (int j=i; j<max_files_on_dir; j++)
if (!d_target[i].used){
index_dest=i;
break;
}//if
if (index_dest=-1) return; //ERNO_DIRFULL
}//if
int sig= -1; //siguiente bloque libre
int cont =512;
int ll //linekd_list_libres
int size = d_source[i].size;
for(int j=0; i<sector_in_disk){
if(FAT[j] =-1){//si esta vacio lo rrelleno con el puntero del "anterior"
FAT[j]=sig;
sig=j;
ll=j;//mantengo el puntero a mi linked list de libres
if (cont >=size) break;
cont+=512;
}//if
}//for
if (cont < size){//no hay espacio suficiente en disco
int aux;
while(FAT[ll]!=-1){//desago la linked list
aux=FAT[ll];
FAT[ll]=-1;
ll=aux;
}//while
}else{//hay espacio
int source=d_source[i].start;
d_target[index_dest].start=ll;//guardo el cominzo del archivo copiado;
sector blk;
for(int j=0; j<size; j+=512){//copio arch
FAT[ll]=FAT[source];
readSector(D,source,blk, ok); if (!ok) return;//ERNO_BADSECTOR
writeSector(D,ll,blk, ok); if (!ok) return;//ERNO_BADSECTOR
ll = FAT[ll];
source=FAT[source];
}//for (si rollback)
d_target[index_dest].file_name=name_t;
d_target[index_dest].file_ext=ext_t;
d_target[index_dest].dir_index=index_dest;
d_target[index_dest].size=size;
d_target[index_dest].type="file";
d_target[index_dest].info=d_source[i].info;//¿Esto va o depende de la fecha?
d_target[index_dest].used=true;//a lo ultimo
return;
}//if-else
}//if
}//for
No esta modulado y e implemento whiles con for y break ¿se gana los pts del ejer o resta algo? Funcionalmente se parece bastante a la solucion.
FAT de linked list. Con -1 si esta libre, indice al siguiente si esta ocupado. No menejo fin de archivo xq lo manejo con el size del archivo.
Pros: me sale asi, es mas eficiente.
Contras: menos mantenible, debugeable tal vez y.. ¿correjible?
Salu2