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.