Vous êtes sur la page 1sur 38

Fundamentos de Arquivos

Andr Pimenta Freire GCC109 Algoritmos e Estrutura de Dados III

Universidade Federal de Lavras

Resumo
Definio de arquivos e armazenamento memria secundria Organizao de arquivos Conceitos de arquivo fsico e arquivo lgico Manipulao de arquivos em C Acesso sequencial e aleatrio em arquivos em

Objetivos da aula
Ao final desta aula, espera-se que os alunos sejam capazes de
Explicar o que um arquivo, e as diferenas entre o armazenamento de dados em memria primria e secundria Comparar os tempos de acesso a dados em memria primria e secundria Explicar a importncia da organizao de arquivos para otimizao de acesso a dados em memria secundria Explicar os conceitos de arquivo fsico e arquivo lgico Implementar funes de manipulao de arquivos texto e binrio em linguagem C Explicar os conceitos de acesso sequencial e aleatrio em arquivos

Arquivos
Informao mantida em memria secundria
Disco rgido Flash memory Disquetes Fitas magnticas CD DVD Nuvem

Discos vs. memria principal


Tempo de acesso
HD: ~ microsegundos s (10-6) RAM: ~ nanosegundos s (10-9) HDs tem tempo de acesso mais lentos na ordem de centenas ou milhares de vezes quando comparados com acesso memria RAM

Discos vs. memria principal


Tempo de acesso
HD: ~ microsegundos s (10-6) RAM: ~ nanosegundos s (10-9)
HDs tem tempo de acesso mais lentos na ordem de centenas ou milhares de vezes quando comparados com acesso memria RAM

O acesso RAM pode ser equivalente a procurar algo em um livro que se tem mo, enquanto procurar no disco seria comparvel a procurar algo em uma biblioteca

Discos vs. memria principal


Capacidade de armazenamento
HD Muito alta, a um custo relativamente baixo RAM limitada pelo custo e espao

Tipo de armazenamento
HD no voltil RAM voltil

Discos vs. memria principal


Acesso a disco caro computacionalmente muito lento
Nmero de acesso ao disco deve ser minimizado A quantidade de informaes recuperadas em um acesso deve ser maximizada

Estruturas de organizao de informaes em arquivos devem ser feitas com o objetivo de minimizar o acesso ao disco

Acesso a diferentes tipos de memria

Organizao de Arquivos
Objetivo: Minimizar as desvantagens do uso da memria externa
Minimizar o tempo de acesso ao dispositivo de armazenamento externo

Organizao deve ser independente de tecnologia Clculo do tempo de acesso


Tempo de acesso = no de acessos * tempo de 1 acesso

Discos vs. memria principal


Estruturas de dados eficientes em memria principal so inviveis em disco Seria fcil obter uma estrutura de dados adequada para discos se os arquivos no sofressem alteraes
Soluo organizao adequada de arquivos no disco e de informaes em arquivos

Discos vs. memria principal


O ideal que a informao necessria possa ser alcanada com apenas um acesso ao disco
Se no for possvel, deseja-se alcanar ao mais prximo possvel

Exemplo busca binria em vetor de 50.000 elementos


No mximo 16 comparaes (log250000 ~ 16)
Vivel em memria Inaceitvel ter 16 acessos a disco, precisaramos de no mximo 2 ou 3

Discos vs. memria principal


Objetivo
Estruturas que agrupem informaes para que informaes sejam obtidas idealmente em uma nica operao de acesso a disco

Exemplo
prefervel acessar todas as informaes de um cliente (nome, endereo, compras) em um lugar s do que ter que procurar cada informao em um lugar diferente

Cronologia
Dados em fita com acesso sequencial Arquivos crescem demais e acesso sequencial fica proibitivo Uso de ndices que, com o crescimento dos arquivos, tambm ficam ineficientes Uso de rvores para apontar para os arquivos Porm, crescem de forma desigual rvores AVL ajudam com o balanceamento Mas garantem minizao de acessos a disco? rvores B e rvores B+ Hashing poderia ser uma boa opo, mas arquivos no so estveis Hashing dinmico

Arquivo fsico e arquivo lgico


Arquivo fsico: sequncia de bytes armazenados no disco Arquivo lgico: arquivo como visto pelo aplicativo que o acessa Associao arquivo fsico arquivo lgico: iniciada pelo aplicativo, gerenciada pelo sistema operacional

Arquivo fsico e arquivo lgico


Arquivo fsico: conjunto de bytes no disco, geralmente agrupados em setores de dados. Gerenciado pelo sistema operacional. Arquivo lgico: modo como a linguagem de programao enxerga os dados. Uma sequncia de bytes, eventualmente organizados em registros ou outra estrutura lgica.

Arquivo fsico e arquivo lgico


Arquivo lgico como usar um telefone para se conectar com qualquer pessoa
No precisamos saber onde a pessoa est, mas podemos falar com ela

O arquivo lgico pode se relacionar a um arquivo em disco ou a outros dispositivos de E/S

Exemplo: Associao entre Arquivo Fsico e Arquivo Lgico

Em C: (associa e abre para leitura)


file *p; if ((p=fopen(meuarq.dat, r))==NULL) printf(erro...) else ...

Esquema Dados em memria principal e secundria

Abertura de arquivos
Arquivo novo (p/ escrita) ou arquivo j existente (p/ leitura ou escrita)... Em C
Comando fopen Parmetros especiais indicam o modo de abertura

Abertura de arquivos funo fopen


fd=fopen(<filename>,<flags>)
<filename>: nome do arquivo a ser aberto <flags>: controlam o modo de abertura
r apenas leitura modo texto; o arquivo precisa existir w cria arquivo vazio para escrita modo texto (se j existe, apagado) a adiciona (append) texto no final do arquivo (se arquivo no existe, cria) r+ Abre arquivo para leitura e escrita modo texto w+ Cria arquivo vazio para leitura e escrita modo texto a+ Abre arquivo para leitura e adio modo texto rb, wb, ab, rb+, wb+, ab+ : anlogo para modo binrio

Fechamento de arquivos
Encerra a associao entre arquivos lgico e fsico, garantindo que todas as informaes sejam atualizadas e salvas (contedo dos buffers de E/S enviados para o arquivo). S.O. fecha o arquivo se o aplicativo no o fizer. Interessante para:
Prevenir contra interrupo Liberar as estruturas associadas ao arquivo para outros arquivos

Exemplo de fechamento em C
fd= fopen(meuarq.dat,r) ...... fclose(fd)

Leitura e escrita em modo texto


C: Funes da linguagem
fgets(<cadeia>,<nro_caracteres>,<fd>) fputs(<cadeia>,<fd>) dados lidos/escritos como strings No se especifica formato

Leitura e escrita em modo texto #include <stdio.h>


#include<stdlib.h> #include <string.h> int main() { char str[80]; FILE *fp; if ((fp=fopen(teste.txt,w))==NULL) { printf(Arquivo no encontrado); exit(1); } do { printf(Entre com uma string: ); gets(str); fputs(str,fp); while (strcmp(str,fim)); fclose(fp); return(0); } L do console at a cadeia fim e grava no arquivo

Leitura e escrita em modo texto


C: Funes da linguagem
fscanf(fd,formato,argumentos) fprintf(fd,formato,argumentos)

dados lidos/escritos de modo formatado Especifica formato (+ flexvel)

Leitura e escrita em modo texto


#include <stdio.h> int main() { FILE *f, *g; L 2 caracteres de um char c, d; arquivo e grava em outro f=fopen(arq1.txt, r); g=fopen(arq2.txt, w); switch (fscanf(f, %c %c, &c, &d)) { case 1: fprintf(g, %c, c); break; // leu um valor case 2: fprintf(g, %c %c, c, d); break; // leu dois valores default: if ferror(f) printf(problemas na leitura do arquivo); break; } fclose(f); fclose(g); return(0); }

Leitura e escrita em modo texto


C: Funes da linguagem
fgetc() fputc() dados lidos/escritos um caracter por vez

Leitura e escrita em modo binrio


fread(<dest-address>, <nro_bytes>, <contador>, fd) fwrite(<dest-address>, <nro_bytes>, <contador>, fd)

dados lidos/escritos como registros ou blocos de bytes modo binrio

#include <stdio.h> #include <stdlib.h> int main() { FILE *arq; Grava real e inteiro num float f=25.5, f1; arquivo, e depois os l int i=12, i1; if ((arq=fopen(teste.txt, wb+))==NULL) exit(1); fwrite(&f, sizeof(float), 1, arq); //grava em arq 1 bloco, de tamanho float, igual quele que inicia no endereo de f (i.e. o valor de f) fwrite(&i, sizeof(int), 1, arq); //grava em arq 1 bloco, de tamanho int, igual quele que inicia no endereo de i (i.e. o valor de i) rewind(arq); //posiciona no incio do arq fread(&f1, sizeof(float), 1, arq); // l 1 bloco de arq, de tam. float e armazena no endereo de f1 fread(&i1, sizeof(int), 1, arq); // l 1 bloco de arq, de tam. int e armazena no endereo de i1 fclose(arq); return(0); }

Leitura e escrita em modo binrio

Fim de arquivo
Ponteiro de arquivo: controla o prximo byte a ser lido C:
feof() Retorna 1, se fim de arquivo; 0, caso contrrio

Acesso sequencial e acesso aleatrio


Leitura sequencial: ponteiro de leitura avana byte a byte (ou por blocos), a partir de uma posio inicial Acesso aleatrio (direto): acesso envolve o posicionamento do ponteiro em um byte ou registro arbitrrio

Seeking
Ao de mover o ponteiro para uma certa posio no arquivo
pos=fseek(fd, byte-offset, origin) Funo retorna a posio final do ponteiro byte-offset deslocamento, em bytes, a partir de origin Origin:

0 incio do arquivo 1 posio corrente 2 final do arquivo

Retorna 0 quando bem sucedida

Seeking
#include <stdio.h> struct dados { L o 10 registro de um char c; arquivo int x; float y; } item; #define TAM sizeof(struct dados); int main() { FILE *pont; pont=fopen(arquivo.txt, r); if (fseek(pont, 9*TAM, 0)) //posiciona no incio do 10. Reg. printf(Erro na busca); else fread(&item, TAM, 1, pont); // l registro atual return(0); }

Bufferizao
Toda operao de I/O bufferizada
Buffer: I/O de dispositivos (teclado, vdeo, etc.),

exceto discos
Memria Cache: I/O discos 256K, 640K Os bytes passam por uma memria de transferncia de tamanho fixo e de acesso otimizado, de maneira a serem transferidos em blocos

Bufferizao
Qual o tamanho dos blocos de leitura/escrita?
Depende do SO e da organizao do disco Sistema de arquivo: gerencia a manipulao de dados no disco, determinando como arquivos podem ser gravados, alterados, nomeados ou apagados Ex. No Windows, determinado pela FAT File Allocation Table (FAT16, FAT32 ou NTFS)

Objetivos da aula
Ao final desta aula, espera-se que os alunos sejam capazes de
Explicar o que um arquivo, e as diferenas entre o armazenamento de dados em memria primria e secundria Comparar os tempos de acesso a dados em memria primria e secundria Explicar a importncia da organizao de arquivos para otimizao de acesso a dados em memria secundria Explicar os conceitos de arquivo fsico e arquivo lgico Implementar funes de manipulao de arquivos texto e binrio em linguagem C Explicar os conceitos de acesso sequencial e aleatrio em arquivos

Referncias Utilizadas
Livro: - FOLK, M.; ZOELLICK, B., File Structures, Second Edition. Addison-Wesley, 1992 Captulo 2.

Baseado nos slides da Profa. Maria Cristina Oliveira ICMC-USP

Vous aimerez peut-être aussi