Estrutura de Arquivos

1. Estrutura de Arquivos

André
PequenoGafanhoto

(usa Ubuntu)

Enviado em 23/08/2015 - 16:34h

Olá, recebi o seguinte problema para fazer:

Existe diferen ̧cas de tempo de leitura de registros quando o tamanho dos registros varia? Fa ̧ca o seguinte experimento:
A) Fa ̧ca uma fun ̧c ̃ao que leia um registro de um arquivo. A posi ̧c ̃ao inicial do registro a ser lido dever ́a ser escolhida ao
acaso (veja explica ̧c ̃oes na Se ̧c ̃ao 2). O tamanho do bloco a ser lido deve ser um parˆametro da fun ̧c ̃ao.
B) Fa ̧ca uma fun ̧c ̃ao que efetue MUITAS leituras de registros diferentes (usando a fun ̧c ̃ao anterior). Essa fun ̧c ̃ao chamar ́a
a fun ̧c ̃ao do item (a) diversas vezes e calcular ́a a tempo total gasto para fazer TODAS as leituras. A Se ̧c ̃ao 2 indica
qual a quantidade de leituras que vocˆe precisar ́a fazer.

A Seção 2 diz que a posição escolhida ao acaso deve ser um número múltiplo do tamanho do bloco e que tenho que fazer a leitura do item B, 200 mil vezes.

Segue meu código:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

char* itemA(FILE *arquivo, int tamanhoBloco)
{

//printf("\n cheguei 4 \n");

char *linha;

linha = (char *) malloc(tamanhoBloco * sizeof(char));

//printf("\n cheguei 5 \n");

if(arquivo==NULL) //verifica se o arquivo existe
{
printf("\n Arquivo não pode ser aberto! \n");
return 1;
}

//printf("\n cheguei 6 \n");

fseek(arquivo,0,SEEK_END); //posiciona o ponteiro para arquivo no final do arquivo

//printf("\n cheguei 7 \n");

int tamanhoArquivo = ftell(arquivo); //pega a posição final que é igual ao tamanho do arquivo

//printf("\n cheguei 8 \n");

srand(time(NULL)); //função que alimenta a função rand(), fazendo esta não repetir os números "aleatórios"

//printf("\n cheguei 9 \n");

int multiploBloco=(rand() % tamanhoArquivo) * tamanhoBloco; //inteiro recebe um numero aleatório múltiplo do tamanho do bloco

//printf("\n cheguei 10 \n");

printf("\n Multiplo do bloco: %d \n",multiploBloco);


if(multiploBloco > tamanhoArquivo)
multiploBloco= multiploBloco%tamanhoArquivo;

//printf("\n cheguei 11 \n");

printf("\n NOVO Multiplo do bloco: %d \n",multiploBloco);

fseek(arquivo,multiploBloco,SEEK_SET);

//printf("\n cheguei 12 \n");

fread(linha,tamanhoBloco,1,arquivo);

//printf("\n cheguei 13 \n");

fclose(arquivo);

//printf("\n cheguei 14 \n");

//free(linha);

//printf("\n cheguei 15 \n");

printf("%s",linha);
return linha;

}

void itemB(FILE *arq, int tamBloco)
{

printf("\n cheguei 2 \n");

int i=0;
char *linha;
linha = (char *) malloc(tamBloco * sizeof(char));
time_t t1,t2;


t1=time(NULL);
printf("\n tempo1: %d \n",t1);

for(i=0; i<20; i++)
{

printf("\n cheguei 3 \n");

itemA(arq,tamBloco);

//free(linha);

printf("\n cheguei 16 \n");

}

printf("\n cheguei 17 \n");

t2=time(NULL);

printf("\n tempo2: %d \n",t2);

printf("\n cheguei 18 \n");

}


int main()
{

FILE *arquivo;
int tamanhoBloco;

arquivo=fopen(" /*algum arquivo*/ ","a+");

tamanhoBloco=10;

//printf("\n cheguei 1 \n");

itemB(arquivo,tamanhoBloco);

//printf("\n cheguei 19 \n");

return 0;
}

Se puderem me ajudar, agradeço, de coração. Valeu!


  






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts