TrabalhosGratuitos.com - Trabalhos, Monografias, Artigos, Exames, Resumos de livros, Dissertações
Pesquisar

O sistema de E/S

Pesquisas Acadêmicas: O sistema de E/S. Pesquise 862.000+ trabalhos acadêmicos

Por:   •  7/4/2013  •  Pesquisas Acadêmicas  •  4.220 Palavras (17 Páginas)  •  391 Visualizações

Página 1 de 17

[ Voltar ] [ Índice ] [ Avançar ]

11. Arquivos

11.1 Introdução

O sistema de E/S de C utiliza o conceito de streams e arquivos. Uma stream é um dispositivo lógico que representa um arquivo ou dispositivo. A stream é independente do arquivo ou dispositivo. Devido a isso, a função que manipula uma stream pode escrever tanto em um arquivo no disco quanto em algum outro dispositivo, como o monitor.

Existem dois tipos de streams: de texto e binária.

Em uma stream de texto podem ocorrer certas traduções de acordo com o sistema hospedeiro. Por exemplo, um caracter de nova linha pode ser convertido para os caracteres retorno de carro e alimentação de linha. Devido a isso pode não haver uma correspondência entre os caracteres da stream e do dispositivo externo; a quantidade de caracteres pode não ser a mesma.

A stream binária é uma sequência de bytes com uma correspondência de um para um com os bytes encontrados no dispositivo externo, isto é, não ocorre nenhuma tradução de caracteres. O número de bytes é o mesmo do dispositivo.

Um arquivo é interpretado pela linguagem C como qualquer dispositivo, desde um arquivo em disco até um terminal ou uma impressora. Para utilizar um arquivo você deve associá-lo a uma stream e, então, manipular a stream. Você associa um arquivo a uma stream através de uma operação de abertura.

Nem todos os arquivos tem os mesmos recursos. Por exemplo, um arquivo em disco pode suportar acesso aleatório enquanto um teclado não.

Do que foi até aqui exposto concluímos que todas as streams são iguais, mas não todos os arquivos.

Se o arquivo suporta acesso aleatório, abrí-lo inicializa o indicador de posição apontando para o começo do arquivo. Quando cada caracter é lido ou escrito no arquivo, o indicador de posição é incrementado.

Um arquivo é desassociado de uma stream através de uma operação de fechamento. Se um arquivo aberto para saída por fechado, o conteúdo de sua stream será escrito no dispositivo externo. Esse processo é geralmente chamado de descarga (flushing) da stream e garante que nenhuma informação seja acidentalmente deixada no buffer de disco.

A stream associa o arquivo a uma estrutura do tipo FILE. Esta estrutura é definida no arquivo de cabeçalho stdio.h

11.2 Funções utilizadas para manipulação de arquivos

As principais funções para manipulação de arquivos são:

FUNÇÃO FINALIDADE

fopen( ) Abrir um arquivo

fclose( ) Fechar um arquivo

putc( ) Escrever um caracter em um arquivo

fputc( ) Idem putc( )

getc( ) Ler um caracter de um arquivo

fgetc( ) Idem getc( )

fseek( ) Posicionar o ponteiro de arquivo num byte específico

fprintf( ) É para o arquivo o que printf é para o console

fscanf( ) É para o arquivo o que scanf é para o console

feof( ) Devolve verdadeiro se o fim do arquivo foi atingido

ferror( ) Devolve verdadeiro se ocorreu um erro

rewind( ) Posicionar o ponteiro de arquivo no início deste

remove( ) Apagar um arquivo

fflush( ) Descarregar um arquivo

Todas estas funções estão no arquivo de cabeçalho stdio.h.

Este arquivo de cabeçalho define três tipos: size_t, fpos_t e FILE. Os dois primeiros são o mesmo que unsigned e o terceiro é discutido mais abaixo.

Este arquivo de cabeçalho também define várias macros. As importantes para a manipulação de arquivos são: NULL, EOF, FOPEN_MAX, SEEK_SET, SEEK_CUR e SEEK_END.

NULL define um ponteiro nulo.

EOF geralmente é definida como -1 e devolve este valor quando uma função de entrada tenta ler além do final do arquivo.

FOPEN_MAX define um valor inteiro que determina o número de arquivos que podem ser abertos ao mesmo tempo.

SEEK_SET, SEEK_CUR e SEEK_END são usadas com a função fssek( ) para o acesso aleatório a um arquivo.

11.3 O ponteiro de arquivo

Basicamente um ponteiro de arquivo identifica um arquivo específico e é usado pela stream para direcionar as operações das funções de E/S. Um ponteiro de arquivo é uma variável ponteiro do tipo FILE. Esta variável é um tipo pré-definido pela linguagem C. Normalmente ela é definida no arquivo de cabeçalho stdio.h, mas isso depende do seu compilador. Para ler ou escrever em arquivos seu programa precisa usar os poteiros de arquivo. Para declarar uma variável como ponteiro de arquivo use a seguinte sintaxe:

FILE *arquivo;

11.4 Abrindo um arquivo

Apesar do sistema de E/S de C considerar arquivo como qualquer dispositivo, para os conceitos apresentados daqui pra frente, consideraremos arquivo como um arquivo em disco.

Para abrir uma stream e associá-la a um arquivo você usa a função fopen( ) ,cuja sintaxe é:

fopen(ARQUIVO,MODO)

Onde ARQUIVO é um ponteiro para uma string que representa o nome do arquivo. Na prática é o nome do arquivo propriamente dito e pode ser um PATH, ou seja, algo como "C:\docs\arquivo.txt", no windows; ou algo como "/home/samu/arquivo.txt" no linux. MODO é uma string que representa como o arquivo será aberto de acordo com a tabela abaixo:

MODO COMO O ARQUIVO SERÁ ABERTO

r Abre um arquivo texto para leitura.

w Abre um arquivo texto para escrita. Se um arquivo com o mesmo nome existir, será sobrescrito.

a Abre um arquivo texto para anexação. Se o arquivo não existir, será criado.

rb Abre

...

Baixar como (para membros premium)  txt (24.3 Kb)  
Continuar por mais 16 páginas »
Disponível apenas no TrabalhosGratuitos.com