Содержание | Глава 13

Функция freopen

#include <stdio.h>
FILE *freopen(const char *fname, const char *mode, FILE *stream);

Функция freopen() связывает существующий поток с другим файлом. Имя нового файла задается параметром fname, режим доступа — параметром mode, a переназначаемый поток определяется указателем stream. Возможные значения строки mode — те же, что и для функции fopen() (полное их описание можно найти в разделе, посвященном описанию fopen).

В версии C99 к параметрам fname, mode и stream применен квалификатор restrict.

При вызове функция freopen() сначала пытается закрыть файл, который в данный момент связан с потоком stream. Ho даже если этот файл закрыть не удается, freopen() открывает другой файл.

При успешном выполнении функция freopen() возвращает указатель на поток, а в противном случае — нулевой указатель.

Чаще всего функция freopen() используется для перенаправления таких определенных системой файлов, как stdin, stdout и stderr, в какой-то другой.

Пример

Приведенная здесь программа использует функцию freopen(), чтобы перенаправить поток stdout в файл с названием OUT. Первое сообщение программы выводится на экран, а второе, перенаправленное, записывается функцией freopen(), в файл на диске.

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
  FILE *fp;

  printf("Это сообщение появится на экране.\n");

  if((fp=freopen("OUT", "w" ,stdout))==NULL) {
    printf("Не удается открыть файл.\n");
    exit(1);
  }

  printf("Это сообщение будет записано в файл OUT.");

  fclose(fp);

  return 0;
}

Зависимые функции

fopen() fclose()
Содержание | Глава 13