int fs_init() { //printf("Função não implementada: fs_init\n"); int i; //variavel auxiliar teste de leitura fat char *bufferFat = ( char *) fat; for (i = 0; i < 256; i++){ bl_read (i, &bufferFat[512 * i]); } //variavel auxiliar teste de leitura dir char *bufferDir = ( char *) dir; for(i =0 ; i< 8; i++){ bl_read(i + 256, &bufferDir[ i * 512]); } if(fat[32] == 4){ for(i = 0; i< 32; i++){ if(fat[i] != 3){ return 1; //disco nao formatado } } }else return 1;// disco nao formatado return 1; }
int descarregaBuffer(int file) { int setor_atual, setor_anterior, byte_setor, i, bloco = dir[file].first_block; char buffer_write[512]; strcpy(buffer_write,""); //encontra-se o ultimo bloco while(fat[bloco] != 2) { bloco = fat[bloco]; } arquivo[file].byte_bloco = (dir[file].size - cont_buffer) % CLUSTERSIZE; setor_atual = (arquivo[file].byte_bloco/512) + (8 * bloco); setor_anterior = setor_atual; //verifica-se a necessidade da alocação de um novo bloco, para a escrita do buffer if ((setor_atual + 1) % 8 == 0) { arquivo[file].bloco = bloco; if (alocaBloco(file, &setor_atual) == 0) { return 0; //se nao houver espaço para a alocação } } byte_setor = arquivo[file].byte_bloco % 512; bl_read(setor_anterior, buffer_write); buffer_write[byte_setor] = '\0'; strncat(buffer_write, buffer_global, (512 - byte_setor)); buffer_aux[512] = '\0'; }
int le_bloco(char *bufferSetor, int setor){ int s; for(s=0;s<8;s++){ if(!bl_read((setor*8)+s, &bufferSetor[SECTORSIZE*s])) return 0; } return 1; }
int fs_init() { //printf("Função não implementada: fs_init\n"); int i; char *bufferFAT = (char*)fat, *bufferDIR = (char*)dir; //le a fat do disco para a memoria, passando como parametro a posicao de cada setor e juntamente o buffer //que incrementa posições de 512 em 512, que é o tamanho do setor //LEITURA DO DISCO SEMPRE DE SETOR EM SETOR for (i = 0; i < 256; i++) { bl_read(i, &bufferFAT[i * 512]); } //lida a fat para a memoria, devemos nos assegurar que ela esta formatada da maneira correta //para isso, de acordo com o modelo apresentado pelo professor, precisamos garantir que as 32 primeiras posições da fat //sao relativas ao agrupamento da fat, que corresponde ao numero 3 if(fat[32] == 4) { for(i = 0; i <= 32; i++) { if(i != 32 && fat[i] != 3) { formatado = 0; //se em alguma das primeiras 32 posições nao possuirem valor 3(agrupamento da fat), o disco nao esta formatado break; } } } else { formatado = 0; //se caso a 33a posição nao for do diretorio formatado = 0 } //le o diretorio for (i = 256; i < 264; i++) { bl_read(i, &bufferDIR[i * 512]); } for (i = 0; i < 128; i++) { arquivo[i].aberto = -2; } return 1; }
int fs_init() { int i; char *bufferFAT = (char *) fat; /*for(i=0;i<32;i++){ if(!le_bloco((char *) fat, i)){ printf("Falha ao carregar o sistema de fat!\n"); return 0; } }*/ /*Carrega para a memória o sistema a FAT, começando do cluster 0 até o 32, multiplicando por 8 para obter cada setor contido */ for (i=0;i<(32*8);i++) { //versão arthur, queria mudar pra minha =/ if(!bl_read(i, &bufferFAT[SECTORSIZE*i])){ printf("Falha ao carregar o sistema de fat!\n"); return 0; } } /*Carrego o arquivo de diretórios utilizando */ if(!le_bloco((char *) dir, 32)){ printf("Falha ao carregar o sistema de diretórios!\n"); return 0; } /*Todos os ids vão pra -1, se ele é negativo, não é um arquivo aberto válido*/ for(i=0; i<128; i++){ file_list[i].id = -1; } checkdisk(); return 1; }