Na linguagem de programação C, a informação sobre um arquivo é acessada através de um descritor cuja estrutura é definida no arquivo de cabeçalho stdio.h. Um programa C que vá manipular arquivos deve então incorporar ao início de seu programa fonte a linha de inclusão desse arquivo de cabeçalho:
#include <stdio.h>
Esse arquivo de cabeçalho define o nome de tipo FILE associado a essa estrutura. Não é necessário conhecer o formato interno dessa estrutura para manipular arquivos. O programador C, para acessar arquivos, define variáveis ponteiros para este tipo, FILE *, que são manipuladas diretamente pelas funções da biblioteca padrão de entrada e saída. Tais variáveis são usualmente chamadas de manipuladores de arquivo. Assim, a função que vai manipular o arquivo deve incluir a declaração de uma variável desse tipo, como em:
FILE *arqFonte;
O objetivo de manipular um arquivo é realizar operações de leitura e escrita sobre seu conteúdo. Para que essas operações de transferência de dados tenham sucesso, é preciso que haja a permissão adequada para a operação. Por exemplo, um teclado seria um dispositivo que não aceita saída de dados (escrita), mas apenas entrada (leitura).
Para abrir um arquivo em C, a rotina fopen é invocada recebendo dois parâmetros. O primeiro é uma string com o nome do arquivo que será aberto. O segundo parâmetro é outra string que especifica o modo de acesso, que pode conter os caracteres r (leitura), w (escrita), a (escrita ao final -- append), e b (acesso em modo binário). O valor de retorno é o manipulador alocado para o arquivo aberto.
Por exemplo, para realizar a leitura do conteúdo de um arquivo chamado teste.asm, a seguinte expressão poderia ser usada no programa:
arqFonte = fopen("teste.asm", "r");
Caso o arquivo não possa ser aberto, a função fopen retorna o ponteiro nulo. Assim, para verificar de o arquivo foi aberto sem problemas, é necessário testar o valor de retorno:
if (arqFonte != 0) { /* tudo bem */ } else { /* erro */ }
Encerradas as operações sobre um arquivo, ele deve ser fechado. Isso permite que o sistema operacional libere o espaço ocupado pelas informações sobre o arquivo para que esse mesmo espaço possa ser reocupado para a manipulação de outros arquivos. Esta liberação é importante, uma vez que sistemas operacionais tipicamente limitam a quantidade de arquivos que podem ser abertos simultaneamente devido a restrições de espaço alocado para essas estruturas auxiliares.
Para fechar um arquivo previamente aberto, a rotina fclose pode ser usada. Ela recebe como argumento o manipulador do arquivo e não retorna nenhum valor. Assim, após encerrada a operação com o arquivo a expressão fclose(arqFonte); fecha-o.