miguel747

Vetor de Bit

Jun 21st, 2012
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.76 KB | None | 0 0
  1. #define Server_BITalbum
  2. #define Server_BITfotos
  3. #define Server_BITusuario
  4. #include "I_bitALBUM.h"
  5. #include "I_bitUSUARIO.h"
  6. #include "I_bitFOTOS.h"
  7. #define ERROR '\0'
  8.  
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11.  
  12. /*Função set bit*/
  13. void setBIT(char Cbit, int n){
  14.      /*função que altera o valor do bit na posição n do char*/
  15.     Cbit = Cbit | 0x00000001<<n;  
  16. }
  17. /*Função reset bit - recebe o código do arquivo (user, album ou foto) e o número do registro*/
  18. void resetBIT(int code, int n){
  19.     char bit_aux='\0'; //variavel auxiliar para percorrer o arquivo
  20.  
  21.     FILE* ArqVB=NULL;
  22.     /*Abertura do arquivo correspondente a camada de persitencia selecionada*/
  23.     switch(code){
  24.                  /*Abre o arquivo de usuarios ou cria caso nao exista*/
  25.                  case 1:      ArqVB = fopen("MVBuser.txt", "r+");break;
  26.                  case 2:      ArqVB = fopen("MVBalbum.txt", "r+");break;
  27.                  case 3:      ArqVB = fopen("MVBfotos.txt", "r+");break;
  28.     }
  29.     rewind(ArqVB);
  30.     fseek(ArqVB, n/8, SEEK_SET);
  31.     fscanf(ArqVB,"%c", &bit_aux);
  32.     /*Adiciona valor Zero a posição n do char Cbit*/
  33.     bit_aux = bit_aux & (~(0x00000001 << (n%8) ) );
  34.     fprintf(ArqVB, "%c", bit_aux);
  35.     fclose(ArqVB);
  36. }
  37.  
  38. /*Função pesquisar bit livre*/
  39. int findBIT(int code){
  40.     char bit_aux='\0'; //variavel auxiliar para percorrer o arquivo
  41.     int cont,i=0;   //variável contadora
  42.  
  43.     FILE* ArqVB=NULL;
  44.     /*Abertura do arquivo correspondente a camada de persitencia selecionada*/
  45.     switch(code){
  46.                  /*Abre o arquivo de usuarios ou cria caso nao exista*/
  47.                  case 1:      ArqVB = fopen("MVBuser.txt", "r+");break;
  48.                  case 2:      ArqVB = fopen("MVBalbum.txt", "r+");break;
  49.                  case 3:      ArqVB = fopen("MVBfotos.txt", "r+");break;
  50.     }
  51.     rewind(ArqVB);
  52.     /*Loop que percorre o arquivo até encontrar um registro livre caso contrário insere um novo valor*/
  53.     while(!feof(ArqVB)){
  54.         /*Lê o primeiro caracter do arquivo*/
  55.         fscanf(ArqVB, "%c", &bit_aux);
  56.         /*analisar o caracter se existe bit vago*/
  57.         for(cont=0;cont<8;cont++){
  58.                 if( (bit_aux & 0x00000001<<cont) == 0x00000000){
  59.                     setBIT( bit_aux, cont);
  60.                     fprintf(ArqVB,"%c", bit_aux);
  61.                     /*fecha o arquivo*/
  62.                     fclose(ArqVB);
  63.                     return (8*i+cont);
  64.               }
  65.         }
  66.         i++;
  67.     }
  68.     bit_aux = 0x00000001;
  69.     /*insere o byte 1, já dispensando a função setBIT, ao final do arquivo*/
  70.     fprintf(ArqVB,"%c", bit_aux);
  71.     /*fecha o arquivo*/
  72.     fclose(ArqVB);
  73.     return (8*(i-1));
  74. }
  75.  
  76. int main(){
  77.     int t;
  78.     t = findBIT(1);
  79.     resetBIT(1,4);
  80.     printf("%d\n",t);
  81.     system("pause");
  82.     return 0;
  83. }
Advertisement
Add Comment
Please, Sign In to add comment