14
Arquivos associado a um dispositivo de armazenamento pode ser tratado como stream sequência de bytes sequência de registros (estruturas) acesso sequencial aleatório 4 5 ...... Nome1 fone1 nome2 fone2 nome3 fone3 nome4 fone4 ...... 29 30 59 60 89 90 1 2 3

Arquivos

  • Upload
    kimball

  • View
    27

  • Download
    0

Embed Size (px)

DESCRIPTION

Arquivos. associado a um dispositivo de armazenamento pode ser tratado como stream sequência de bytes sequência de registros (estruturas) acesso sequencial aleatório. 0 1 2 3 4 5 ...... N-1 eof. - PowerPoint PPT Presentation

Citation preview

Page 1: Arquivos

Arquivos• associado a um dispositivo de armazenamento• pode ser tratado como stream

– sequência de bytes

– sequência de registros (estruturas)

• acesso– sequencial

– aleatório 0 1 2 3 4 5 ...... N-1 eof

Nome1 fone1 nome2 fone2 nome3 fone3 nome4 fone4 ......

0 29 30 59 60 89 90 129 ......

0 1 2 3 ......

Page 2: Arquivos

ArquivosEstratégias:- Funções em C

- fopen – abre ou cria um arquivo- fread – realiza a leitura de um arquivo- fwrite – realiza a escrita em um arquivo- fclose – fecha um arquivo

OU: - Objetos em C++

- Contrutor: cria ou abre o arquivo- Stream: escreve ou lê dados- Destrutor fecha o arquivo

Page 3: Arquivos

ArquivosInfra-estrutura necessária:

Sistema Operacional:

manutenção do sistema de arquivos (file systems)

gerenciamento de acessos

interfaces com dispositivos físicos

Dispositivos físicos

discos magnéticos – trilhas/setores/clustersC:\teste.doc

Unidade física, restrições de acesso, tamanho, início, encadeamento, organização(cluster)

Acesso a uma trilha e setor

Page 4: Arquivos

ArquivosDiscos Magnéticos:

Trilhas concêntricasCilindros: junção das trilhas de mesma localização relativa nas diversas superfíciesSetores: unidades de armazenamento (512 bytes)Cluster: agrupamento de setores (S.O.)Densidade armazenamento : 10-15 Gbits/pol2300 – 500 mil BPI (bits per inch) em cada trilha2.000 TPI (tracks per inch) -> 0,635 nmfull stroke : 15 a 20 ms (67hz)Trilhas adjacentes: 1 e 2 msBase: alumínio/magnésio vidro (ibm)Tempo Acesso: busca+latência rotacional+comandosLatência média: 5.400 rpm -> 5,56 ms

7.200 rpm -> 4,17 ms 10.000 rpm -> 3,00 ms

Busca média: 8,5 -> 6,5 ms

Page 5: Arquivos

Arquivoschkdsk a:

O número de série do volume é F815-97A8

1.457.664 bytes de espaço total em disco

1.165.824 bytes em dois arquivos do usuário

291.840 bytes disponíveis no disco

512 bytes em cada unidade de alocação

2.847 total de unidades de alocação no disco

570 unidades de aloc. disponíveis no disco

Tamanho: 1.4 Mbytes

Cluster: 512 bytes

Page 6: Arquivos

Arquivoschkdsk c:

volume WINME criado em 30/9/2000 as 18hs

O número de série do volume é 3952-18FB

10.006.696 kilobytes de espaço total em disco

1.731.424 kilobytes disponíveis

8.192 bytes em cada unidade de alocação

1.250.837 total de unidades de alocação no disco

216.428 unidades de aloc. disponíveis no disco

Tamanho: 10 Gbytes

Cluster: 8 Kbytes

Page 7: Arquivos

Arquivoschkdsk d:

4.285.173.760 bytes de espaço total em disco

444.342.272 bytes em 742 arquivos ocultos

10.731.720 bytes em 2.044 pastas

3.673.260.032 bytes em 32.772 arquivos de usuário

156.807.168 bytes disponíveis no disco

4.096 bytes em cada unidade de alocação

1.046.185 total de unidades de alocação no disco

38.283 unidades de aloc. disponíveis no disco

Tamanho: 4 Gbytes

Cluster: 4Mbytes

Page 8: Arquivos

ArquivosFragmentação externa:

- ferramentas de desfragmentação do sistema operacional

Fragmentação interna

- tratamento com administração de partições de disco

Cluster 0 Cluster 1 Cluster 2 Cluster 3 Cluster 4

Page 9: Arquivos

ArquivosFragmentação externa:

- ferramentas de desfragmentação do sistema operacional

Fragmentação interna

- tratamento com administração de partições de disco

Cluster 0 Cluster 1 Cluster 2 Cluster 3 Cluster 4

Page 10: Arquivos

ArquivosEstratégias: Funções em CExemplo: leitura de caracteres de arquivo para monitor#include <stdio.h>#include <stdlib.h>void main(){FILE *fp; //ponteiro para arquivochar c;fp =fopen(“nome.txt”, “r”);If (fp==NULL) exit(0);while ( (c= fgetc(fp)) != EOF){

cout.put(c);}fclose(fp);}

Page 11: Arquivos

ArquivosEstratégias: Objetos em C++Exemplo: arquivo de clientes#include <iostream>using namespace std;#include <fstream>#include <cstdlib> int main(){ int aux_cod; char aux_nome[30]; char aux_fone[30]; ofstream arquivoCliente( "cliente.dat", ios::out ); if ( !arquivoCliente ) { // testa abertura do arquivo cerr << "Arquivo não pode ser aberto!" << endl; exit( 1 ); } cout<<"Digite o código, nome e fone dos clientes: "<<endl; while ( cin >> aux_cod >> aux_nome >> aux_fone ) { arquivoCliente << aux_cod << ' ' << aux_nome << ' ' << aux_fone << '\n'; cout << "Mais um ? "; } return 0;}

Page 12: Arquivos

ArquivosEstratégias: Objetos em C++Exemplo: arquivo de clientes#include <iostream>using namespace std;#include <fstream>#include <cstdlib> int main(){ int aux_cod; char aux_nome[30]; char aux_fone[30]; ofstream arquivoCliente( "cliente.dat", ios::out ); if ( !arquivoCliente ) { // testa abertura do arquivo cerr << "Arquivo não pode ser aberto!" << endl; exit( 1 ); } cout<<"Digite o código, nome e fone dos clientes: "<<endl; while ( cin >> aux_cod >> aux_nome >> aux_fone ) { arquivoCliente << aux_cod << ' ' << aux_nome << ' ' << aux_fone << '\n'; cout << "Mais um ? "; } return 0;}

Declaração do objeto e parâmetros para construtor

Sobrecarga de operadores: testa Se abertura do arquivo está ok!

Operadores de inserção em stream paraa escrita no arquivo!

1 nome1 fone12 nome2 fone23 nome3 fone3

Page 13: Arquivos

ArquivosEstratégias: Objetos em C++Exemplo: arquivo de clientes#include <iostream>using namespace std;#include <fstream>#include <cstdlib> int main(){ int aux_cod; char aux_nome[30]; char aux_fone[30]; ifstream arquivoCliente( "cliente.dat", ios::in ); if ( !arquivoCliente ) { // testa abertura do arquivo cerr << "Arquivo não pode ser aberto!" << endl; exit( 1 ); } cout<<“Dados no arquivo: "<<endl; while (arquivoCliente >> aux_cod >> aux_nome >> aux_fone ) { cout << aux_cod << ‘ ' << aux_nome << ‘ ' << aux_fone << endl; } return 0;}

Page 14: Arquivos

ArquivosFunções membro auxiliares

seekg, seekp – permitem o posicionamento de ponteiros para leitura e gravação. Pode-se indicar um número de bytes a partira da posição corrente, do início do arquivo ou do final do arquivo

(ios::curr, ios::beg, ios::end)ex.: arquivoCliente.seekg(n);

arquivoCliente.seekg(n, ios::curr);

tellg, tellp - permitem recuperar a posição corrente dos ponteiros de leitura e gravação

ex.: arquivoCliente.seekg(0, ios::end);

posicao= arquivoCliente.tellg();

//posição equivale ao tamanho do arquivo