freopen  função

Protótipo

FILE * freopen (const char * caminho, const char * modo, FILE * fluxo);

Descrição

O arquivo especificado na cadeia de caracteres caminho é aberto e o fluxo é associado ao fluxo apontado no parâmetro fluxo. O fluxo original, se existir, é fechado. Os modos válidos são os mesmos que os da função fopen.

Caso o parâmetro caminho seja NULL, a função tenta reassociar o fluxo ao modo. Existem restrições para quais modos são válidos, dependendo do modo original:

  • Fluxos abertos com o modo 'r+', 'w+' ou 'a+' podem ser reabertos com qualquer modo.
  • Fluxos abertos com o modo 'a' podem ser reabertos com o modo 'a' ou 'w'.
  • Fluxos abertos com o modo 'w' podem ser abertos com o modo 'a' ou 'w'.
  • Fluxos abertos com o modo 'r' só podem ser reabertos com o modo 'r'.

O uso primário dessa função é redirecionar os fluxos padrões (como stdin, stdout e stdderr) para arquivos específicos. Ou seja, toda cadeia de caracteres escrita com a função printf pode ser redirecionada, como exemplo, para o arquivo "saida.txt".

Parâmetros

caminho - Cadeia de caracteres contendo o caminho para o arquivo. Pode ser NULL, alterando o modo do fluxo passado.

modo - Cadeia de caracteres especificando o modo de acesso.

Modos permitidos:

modo

descrição

r

Abre o arquivo em modo leitura. O arquivo deve existir.

r+

Abre o arquivo em modo leitura e atualização, permitindo tanto leitura quanto escrita. O arquivo deve existir.

w

Abre o arquivo em modo escrita. Caso o arquivo já exista, ele é sobrescrito, funcionando como se fosse um novo arquivo, vazio.

w+

Abre o arquivo em modo escrita e atualização, permitindo tanto leitura quanto escrita. Caso o arquivo já exista, ele é sobrescrito, funcionando como se fosse um novo arquivo, vazio.

a+

Abre o arquivo em modo anexo e atualização, permitindo tanto leitura quanto escrita. Dados só podem ser anexados ao arquivo, isto é, sempre que uma função de escrita for chamada (fwrite, fputs, ...), os dados são escritos no fim do arquivo, não importando a posição atual. Funções de leitura podem ler qualquer posição, desde que o arquivo seja reposicionado utilizando fseek, fsetpos ou rewind. Caso não exista, o arquivo é criado.

Modificadores:

modificador

descrição

exemplos

b

Abre o arquivo em modo binário ao invés de modo texto. Normalmente, este modificador apenas surte efeito na plataforma Windows, sendo ignorado em sistemas *nix. De qualquer forma, utilizar o modo correspondente ao tipo dos dados melhora a portabilidade do programa.

rb; r+b; rb+

x

Este modificador especifica que, quando o arquivo já existe, a função fopen deve falhar ao invés de sobreescrever o arquivo existente. Esse modificador foi incluído no padrão C2011, não estando disponível em todos os compiladores e ambientes. Ele não surte efeitos em modos de leitura (r), pois a função, quando encontra um arquivo existente, já falha nesses modos.

wx; wb+x;

fluxo - Fluxo a ser redirecionado ou reaberto.

Valor de retorno

Se o arquivo foi aberto com sucesso, fopen retorna um ponteiro para um objeto FILE, que pode ser utilizado em funções relacionadas para operar em cima do arquivo. Esse ponteiro é o próprio ponteiro passado no parâmetro fluxo.

Caso o arquivo não tenha sido aberto com sucesso, a função retorna NULL.

Exemplo
#include <stdio.h>

int main() {
    FILE* saida = freopen("saida.txt", "w", stdout);
    if(saida == NULL) {
        fprintf(stderr, "Erro ao tentar redirecionar o fluxo padrão stdout.");
        return 1;
    }

    puts("Essa cadeia de caracteres foi escrita no arquivo saida.txt, e não na tela.");
    fclose(saida);

    return 0;
}
Veja também

fopen função

fclose função