#define Server_BITalbum
#define Server_BITfotos
#define Server_BITusuario
#include "I_bitALBUM.h"
#include "I_bitUSUARIO.h"
#include "I_bitFOTOS.h"
#define ERROR '\0'
#include <stdio.h>
#include <stdlib.h>
/*Função set bit*/
void setBIT(char Cbit, int n){
/*função que altera o valor do bit na posição n do char*/
Cbit = Cbit | 0x00000001<<n;
}
/*Função reset bit - recebe o código do arquivo (user, album ou foto) e o número do registro*/
void resetBIT(int code, int n){
char bit_aux='\0'; //variavel auxiliar para percorrer o arquivo
FILE* ArqVB=NULL;
/*Abertura do arquivo correspondente a camada de persitencia selecionada*/
switch(code){
/*Abre o arquivo de usuarios ou cria caso nao exista*/
case 1: ArqVB = fopen("MVBuser.txt", "r+");break;
case 2: ArqVB = fopen("MVBalbum.txt", "r+");break;
case 3: ArqVB = fopen("MVBfotos.txt", "r+");break;
}
rewind(ArqVB);
fseek(ArqVB, n/8, SEEK_SET);
fscanf(ArqVB,"%c", &bit_aux);
/*Adiciona valor Zero a posição n do char Cbit*/
bit_aux = bit_aux & (~(0x00000001 << (n%8) ) );
fprintf(ArqVB, "%c", bit_aux);
fclose(ArqVB);
}
/*Função pesquisar bit livre*/
int findBIT(int code){
char bit_aux='\0'; //variavel auxiliar para percorrer o arquivo
int cont,i=0; //variável contadora
FILE* ArqVB=NULL;
/*Abertura do arquivo correspondente a camada de persitencia selecionada*/
switch(code){
/*Abre o arquivo de usuarios ou cria caso nao exista*/
case 1: ArqVB = fopen("MVBuser.txt", "r+");break;
case 2: ArqVB = fopen("MVBalbum.txt", "r+");break;
case 3: ArqVB = fopen("MVBfotos.txt", "r+");break;
}
rewind(ArqVB);
/*Loop que percorre o arquivo até encontrar um registro livre caso contrário insere um novo valor*/
while(!feof(ArqVB)){
/*Lê o primeiro caracter do arquivo*/
fscanf(ArqVB, "%c", &bit_aux);
/*analisar o caracter se existe bit vago*/
for(cont=0;cont<8;cont++){
if( (bit_aux & 0x00000001<<cont) == 0x00000000){
setBIT( bit_aux, cont);
fprintf(ArqVB,"%c", bit_aux);
/*fecha o arquivo*/
fclose(ArqVB);
return (8*i+cont);
}
}
i++;
}
bit_aux = 0x00000001;
/*insere o byte 1, já dispensando a função setBIT, ao final do arquivo*/
fprintf(ArqVB,"%c", bit_aux);
/*fecha o arquivo*/
fclose(ArqVB);
return (8*(i-1));
}
int main(){
int t;
t = findBIT(1);
resetBIT(1,4);
printf("%d\n",t);
system("pause");
return 0;
}
Comments