Hash com arquivos binários c

460 palavras 2 páginas
#include
#include
#define hashLimit 13

struct reg
{
int codigo; char nome[50]; int status,elo;
};

typedef struct reg Reg;

FILE* initFile()
{
FILE *arq = fopen("dados.dat","wb"); Reg reg; int i; reg.codigo = 0; reg.status = 1; reg.elo = 0; strcpy(reg.nome,"Livre"); for(i=0;i0) { printf("Insira o nome\n"); fflush(stdin); gets(reg.nome); fflush(stdin); reg.elo = 0; reg.status = 1; } return reg;

} char buscaHash(int codigo)
{
FILE *arq = fopen("dados.dat","rb"); Reg reg; char achou=0; int pos = hash(codigo); fseek(arq,pos*sizeof(Reg),0); fread(®,sizeof(Reg),1,arq); if(reg.codigo ==codigo) achou =1; else { if(reg.elo>0) { while(reg.elo != 0) { fseek(arq,reg.elo*sizeof(Reg),0); fread(®,sizeof(Reg),1,arq); if(reg.codigo ==codigo) achou =1; } } } fclose(arq); return achou;
}
int length(FILE *arq)
{
fseek(arq,0,2); return ftell(arq)/sizeof(Reg);
}
void insereRegistro(Reg reg,FILE *arq)
{
Reg regdad; int pos; pos=hash(reg.codigo); fseek(arq,pos*sizeof(Reg),0); fread(®dad,sizeof(Reg),1,arq); if(regdad.codigo==0) { fseek(arq,pos*sizeof(Reg),0); fwrite(®,sizeof(Reg),1,arq); } else { if(!buscaHash(reg.codigo)) { reg.elo = regdad.elo; regdad.elo = length(arq); fseek(arq,pos*sizeof(Reg),0); fwrite(®dad,sizeof(Reg),1,arq);

Relacionados

  • Arquivo direto
    2247 palavras | 9 páginas
  • Exercicio de Fundamentos de TI
    782 palavras | 4 páginas
  • AS TÉCNICAS CRIPTOGRÁFICAS, CONCEITOS, USOS E APLICAÇÕES
    6507 palavras | 27 páginas
  • Hash
    2159 palavras | 9 páginas
  • cientifico
    930 palavras | 4 páginas
  • 56456456465
    10056 palavras | 41 páginas
  • Introdução criptografia
    10435 palavras | 42 páginas
  • Criptografia
    4895 palavras | 20 páginas
  • Engenheiro
    14885 palavras | 60 páginas
  • Diversos
    5741 palavras | 23 páginas