miguel747 icon

Vetor de Bit

miguel747 | PRO | 06/21/12 10:05:22 PM UTC | 0 ⭐ | 169 👁️ | Never ⏰ | []
C |

2.76 KB

|

None

|

0 👍

/

0 👎

#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