next up previous contents
Next: Arquivos em C Up: Estruturas de dados Previous: Árvores   Sumário


Manipulação de arquivos

Um arquivo é um recurso manipulado pelo sistema operacional ao qual a linguagem de programação tem acesso. É uma abstração que permite acessar convenientemente dispositivos externos de entrada e saída de dados. Embora tipicamente um arquivo seja associado a um espaço de armazenamento em disco, outros dispositivos de entrada e saída são manipulados como arquivos, tais como o teclado e a tela de um monitor.

Usualmente, para trabalhar com um arquivo, ele deve ser inicialmente aberto. Sua abertura indica ao sistema operacional que o arquivo será manipulado, de forma que informação que agiliza o acesso ao arquivo é mantida em memória. Após aberto, um arquivo é acessado através de um descritor, que basicamente indica onde o sistema operacional mantém a informação sobre o arquivo. Nas descrições de algoritmos, o descritor está associado a um tipo FILE.

A abertura de um arquivo é o passo inicial para a realização dessas operações. O objetivo dessa operação é, inicialmente, traduzir um nome simbólico que identifica o arquivo para um descritor que o programa pode manipular de forma mais eficiente. Nesse procedimento de abertura, é necessário também verificar se quem deseja realizar a manipulação do arquivo tem as autorizações necessárias.

Para realizar a abertura de um arquivo, o sistema operacional oferece uma rotina de serviço que recebe pelo menos um argumento que é o nome do arquivo e retorna o descritor. Outros argumentos que tipicamente estão presentes indicam o modo de operação do arquivo e ações que devem ser tomadas em algumas situações específicas. O modo de operação é designado como leitura ou escrita, podendo adicionalmente ser especificado se o conteúdo deve ser tratado como seqüências de caracteres (modo texto) ou dados (modo binário). As indicações de ação determinam, por exemplo, o que fazer se o arquivo especificado para escrita não existe (criar ou gerar erro), ou caso o arquivo já exista se o conteúdo anterior deve ser sobrescrito (truncate) ou mantido (append).

Por simplicidade, o procedimento usado para abertura de arquivos nas descrições de algoritmo omitem o segundo argumento:

OPENFILE(): recebe como argumento uma string com o nome do arquivo; retorna uma referência para FILE, que é usada nas operações de manipulação do arquivo, ou o valor nulo em caso de falha na operação.

Uma vez que o arquivo esteja aberto, o sistema operacional mantém em suas estruturas internas todas as informações necessárias para sua manipulação; essa informação é obtida através do descritor do arquivo. Por exemplo, quando um arquivo é aberto para leitura a ``posição atual'' para a próxima operação é o início do arquivo. Ao ler uma linha do arquivo, essa posição é atualizada para o início da linha seguinte e assim sucessivamente.

Quando o arquivo não precisa mais ser manipulado, esses recursos mantidos pelo sistema operacional podem ser liberados. Novamente, uma rotina do sistema oferece esse serviço, que será descrito nos algoritmos pela rotina

CLOSEFILE(): recebe como argumento uma referência para FILE; não tem valor de retorno, mas simplesmente fecha o arquivo que havia sido aberto com OPENFILE().

As rotinas de manipulação de conteúdo que são utilizadas dependem do tipo de conteúdo e do modo de operação do arquivo. No nível mais básico, qualquer arquivo pode ser visto como uma seqüência de bytes; nesse nível, uma rotina de leitura de um byte e outra de escrita de um byte devem existir. A partir dessas, outras rotinas com nível de abstração mais alto podem ser oferecidas.

Para a leitura de arquivos texto, duas rotinas são de interesse:

READCHAR(): recebe como argumento uma referência para FILE; retorna o próximo caráter do arquivo, ou um valor especial EOF para sinalizar que a posição atual alcançou o final do arquivo.

READLINE(): recebe como argumento uma referência para FILE; retorna a próxima linha do arquivo, ou o valor nulo se não houver próxima linha.



Subsections
next up previous contents
Next: Arquivos em C Up: Estruturas de dados Previous: Árvores   Sumário
Ivan L. M. Ricarte 2003-02-14