Toda vez que estamos trabalhando com arquivos, há uma espécie de posição atual no arquivo. Esta posição, gerenciada pelo compilador, é a posição de onde será lido ou escrito o próximo caracter. Normalmente, num acesso sequencial a um arquivo, não temos que mexer nesta posição pois quando lemos um caractere a posição no arquivo é automaticamente atualizada. Num acesso randômico teremos que mexer nesta posição (ver fseek()). Protótipo:
int putc (int ch,FILE *fp);
Escreve um caracter no arquivo.
Retorna um caracter lido do arquivo. Protótipo:
int getc (FILE *fp);
EOF ("End of file") indica o fim de um arquivo. Às vezes, é necessário verificar se um arquivo chegou ao fim. Para isto podemos usar a função feof(). Ela retorna não-zero se o arquivo chegou ao EOF, caso contrário retorna zero. Seu protótipo é:
int feof (FILE *fp);
A seguir é apresentado um programa onde várias operações com arquivos são realizadas. Primeiro o arquivo é aberto para a escrita, e imprime-se algo nele. Em seguida, o arquivo é fechado e novamente aberto para a leitura. Verifique o exemplo.
#include <stdio.h #include <stdlib.h #include <string.h void main() { FILE *p; char c, str[30], frase[80] = "Este e um arquivo chamado: "; int i; /* Le um nome para o arquivo a ser aberto: */ printf("\n\n Entre com um nome para o arquivo:\n"); gets(str); if (!(p = fopen(str,"w"))) /* Caso ocorra algum erro na abertura do arquivo..*/ { /* o programa aborta automaticamente */ printf("Erro! Impossivel abrir o arquivo!\n"); exit(1); } /* Se nao houve erro, imprime no arquivo, fecha ...*/ strcat(frase, str); for (i=0; frase[i]; i++) putc(frase[i],p); fclose(p); /* abre novamente para a leitura e fecha. */ p = fopen(str,"r"); while (!feof(p)) { c = getc(p); printf("%c",c); } fclose(p); }