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';
}
Esempio n. 3
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;
}
Esempio n. 5
0
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;
}