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
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 ......
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
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
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
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
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
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
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
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
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);}
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;}
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
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;}
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