Quando tratamos de arquivos precisamos saber que antes de tudo precisamos
abri-lo e depois de tudo precisamos fecha-lo. Para isso, existem essas duas
funções que irei explicar.
FILE *fopen(char *arquivo, char *modo);
A função
fopen da biblioteca
stdio.h retorna uma estrutura
com alguns dados sobre o arquivo, mas vamos ignorar isso. O primeiro
parâmetro que fopen recebe é o nome do arquivo e o segundo é o modo, ou
seja, como ele deve ser aberto.
Os modos possíveis de se usar aqui são:
- r: abre o arquivo texto para leitura e o cursor é posto no inicio do arquivo.
- r+: abre o arquivo para leitura e escrita. O cursor é posicionado no início do arquivo e o conteúdo anterior é apagado.
- w: limpa o conteúdo do arquivo ou cria um arquivo texto para escrever. O cursor é posicionado no início do arquivo.
- w+: abre o arquivo como leitura e escrita. Se o arquivo já existe ele o sobrescreve, senão ele o criará. O cursor é posicionado no início do arquivo e o conteúdo anterior é descartado.
- a: abre o arquivo para anexação (não perder o conteúdo já inserido). O arquivo é criado se ele não existir. O cursor é posicionado no final do arquivo.
- a+: abre o arquivo para anexação e leitura. O arquivo se não existir é criado. O cursor é posicionado no final do arquivo.
Todos os modos listados são para arquivos textos, podemos definir que o
sistema deve tentará acessar um arquivo binário adicionando "b" aos modos
do texto. Exemplo: "w+b", "r+b", "a+b".
Outro ponto importante, o "cursor" mencionado não é o do console. Ele é
uma espécie de apontador para onde estamos no arquivo. Do mesmo modo, se
o cursor estiver no final do arquivo e tentarmos ler algo teremos como
retorno EOF.
int fclose(FILE *fd);
A função acima é a responsável por fechar um arquivo. A responsabilidade
de fechar um arquivo, basicamente, é que ao se fechar o arquivo tudo que
estiver no buffer antes será transferido para o arquivo e este será fechado.
Exemplo do que foi tratado até agora seria isso: