Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #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;
- }
Advertisement
Add Comment
Please, Sign In to add comment