Função de biblioteca C - freopen ()
Descrição
A função da biblioteca C FILE *freopen(const char *filename, const char *mode, FILE *stream) associa um novo filename com o fluxo aberto fornecido e ao mesmo tempo fecha o arquivo antigo no fluxo.
Declaração
A seguir está a declaração da função freopen ().
FILE *freopen(const char *filename, const char *mode, FILE *stream)
Parâmetros
filename - Esta é a string C contendo o nome do arquivo a ser aberto.
mode- Esta é a string C que contém um modo de acesso ao arquivo. Inclui -
Sr. Não. | Modo e descrição |
---|---|
1 |
"r" Abre um arquivo para leitura. O arquivo deve existir. |
2 |
"w" Cria um arquivo vazio para gravação. Se já existir um arquivo com o mesmo nome, seu conteúdo será apagado e o arquivo será considerado um novo arquivo vazio. |
3 |
"a" Anexa a um arquivo. As operações de gravação acrescentam dados no final do arquivo. O arquivo é criado se não existir. |
4 |
"r+" Abre um arquivo para atualizar leitura e gravação. O arquivo deve existir. |
5 |
"w+" Cria um arquivo vazio para leitura e gravação. |
6 |
"a+" Abre um arquivo para leitura e anexação. |
stream - Este é o ponteiro para um objeto FILE que identifica o fluxo a ser reaberto.
Valor de retorno
Se o arquivo foi reaberto com sucesso, a função retorna um ponteiro para um objeto identificando o fluxo ou então, um ponteiro nulo é retornado.
Exemplo
O exemplo a seguir mostra o uso da função freopen ().
#include <stdio.h>
int main () {
FILE *fp;
printf("This text is redirected to stdout\n");
fp = freopen("file.txt", "w+", stdout);
printf("This text is redirected to file.txt\n");
fclose(fp);
return(0);
}
Vamos compilar e executar o programa acima que enviará a seguinte linha em STDOUT porque inicialmente não abrimos stdout -
This text is redirected to stdout
Depois de uma chamada para freopen(), associa STDOUT ao arquivo file.txt, então tudo o que escrevemos em STDOUT que entra file.txt. Então, o arquivofile.txt terá o seguinte conteúdo.
This text is redirected to file.txt
Agora vamos ver o conteúdo do arquivo acima usando o seguinte programa -
#include <stdio.h>
int main () {
FILE *fp;
int c;
fp = fopen("file.txt","r");
while(1) {
c = fgetc(fp);
if( feof(fp) ) {
break ;
}
printf("%c", c);
}
fclose(fp);
return(0);
}