next up previous contents
Next: Exercícios Up: Manipulação de arquivos Previous: Arquivos em C   Sumário

Acesso seqüencial

Quando o arquivo é aberto, a posição corrente (mantida internamente pelo sistema) é o início do arquivo. A cada operação executada sobre o arquivo, essa posição é atualizada. O valor da posição corrente pode ser obtido pela função ftell. A função feof retorna um valor verdadeiro (inteiro diferente de 0) se a posição corrente para o arquivo indicado é o final do arquivo, ou falso (inteiro igual a 0) em caso contrário.

Na maior parte dos exemplos analisados neste texto, os arquivos estarão sendo manipulados de forma seqüencial. Assim, na leitura de um arquivo contendo texto, após a leitura de um caráter a posição corrente do arquivo estará indicando o próximo caráter; após a leitura de uma linha, a posição indicada será o início da próxima linha.

A rotina C para obter um caráter de um arquivo é fgetc:

    int fgetc(FILE *stream);
O valor de retorno de fgetc é um inteiro, que pode conter o código ASCII do caráter ou o valor EOF (definido em stdio.h), que indica o final do arquivo ou a ocorrência de alguma condição de erro.

Uma linha de um arquivo texto nada mais é do que uma seqüência de caracteres seguido por um caráter terminador de linha (newline). Tipicamente, o caráter terminador de linha adotado é o CR (ASCII 0x0D), embora alguns sistemas operacionais adotem o par CR/LF (o par de valores 0x0D e 0x0A) como terminador de linha. A linguagem C traduz o terminador de linha para o caráter '\n'.

Para ler uma linha de um arquivo texto, a função da biblioteca padrão C fgets pode ser utilizada:

    char *fgets(char *s, int size, FILE *stream);
Essa função recebe três argumentos. O primeiro é o endereço de um arranjo de caracteres que irá receber a linha lida; esse arranjo deve ter capacidade para pelo menos size caracteres. O segundo é o número máximo de caracteres que deve ser lido da linha, caso a linha tenha mais caracteres que essa quantidade. O terceiro parâmetro é o manipulador do arquivo de onde a linha será lida. O retorno é um ponteiro para o início do arranjo com a linha, ou o ponteiro nulo caso o final do arquivo tenha sido atingido. Se houver espaço para o terminador de linha no arranjo, ele será incluído. Após o último caráter lido, a rotina inclui o terminador de string '\0'.

Operações correspondentes para a escrita em arquivos são oferecidas pela biblioteca padrão de C. Para escrever um caráter na posição corrente de um arquivo, a rotina fputc é usada:

    int fputc(int c, FILE *stream);

Para escrever uma string, a rotina fputs pode ser utilizada:

    int fputs(const char *s, FILE *stream);
Neste caso, a string apontada por s (sem o terminador de string '\0') é escrita no arquivo.

A função fseek permite modificar a posição corrente para um ponto arbitrário do arquivo, se tal operação for permitida. O primeiro argumento dessa função é o manipulador do arquivo; o segundo, um valor long indicando o deslocamento desejado; e o terceiro, um valor inteiro inidcando a referência para o deslocamento, que pode ser o início do arquivo (SEEK_SET), a posição corrente (SEEK_CUR) ou o final do arquivo (SEEK_END). Um valor de retorno 0 indica que a operação foi completada com sucesso. A função rewind retorna a posição corrente para o início do arquivo, sem valor de retorno.


next up previous contents
Next: Exercícios Up: Manipulação de arquivos Previous: Arquivos em C   Sumário
Ivan L. M. Ricarte 2003-02-14