freopen – замена файла связанного с потоком данных.
Синтаксис:
#include < stdio.h >
FILE *freopen (const char *filename, const char *mode, FILE *stream);
Аргументы:
filename – указатель на строку содержащую имя (включая путь) открываемого файла.
mode – указатель на строку содержащую режим доступа к открываемому файлу.
stream – указатель на управляющую таблицу открытого потока данных для которого необходимо заменить файл.
Возвращаемое значение:
Указатель на управляющую таблицу открытого потока данных (аргумент stream), если открытие файла произошло успешно.
NULL – если при открытии файла произошла ошибка. В переменную errno будет записан код ошибки.
Описание:
В первую очередь функция freopen закрывает файл, связанный с потоком stream, игнорируя ошибки, если они возникли при закрытии файла. Затем открывается файл, указанный аргументом filename с режимом доступа, указанным в аргументе mode. Открытый файл связывается с потоком данных указанным аргументом stream.
В основном функция freopen используется для замены файла связанного со стандартными потоками ввода-вывода (stdin, stdout или stderr) или с пользовательскими потоками данных.
Режимы доступа к файлу такие же как для функции fopen и указаны ниже:
r или rb – открытие файла для чтения. Если файла не существует, работа программы завершиться с ошибкой.
w или wb – создать файл для записи, если файла уже существует, он будет открыт, он все имеющиеся в файле данные будут уничтожены.
a или ab – открыть файл для записи в конец файла, если файла не существует, он будет создан.
r+ или rb+ или r+b – открыть файл для чтения и записи. Если файла не существует, работа программы завершиться с ошибкой.
w+ или wb+ или w+b – создать файл для чтения и записи, если файл уже существует, он будет открыт, но все имеющиеся в файле данные будут уничтожены.
a+ или ab+ или a+b - открыть файл для записи в конец файла, если файла не существует, он будет создан.
Пример:
В примере производится перенаправление данных выводимых в стандартный поток вывода (stdout) с консоли в файл test.txt.
#include < stdio.h > //Для printf, freopen, fclose
int main (void)
{
// Переменная, в которую будет сохранен указатель
// на управляющую таблицу стандартного потока данных вывода
FILE *mf;
//Вывод строки в стандартный поток вывода (stdout). Строка
//должна вывестись на консоль
printf (“Проверка записи. Тест 1.”);
// Замена файла связанного со стандартным потоком вывода stdout.
// Теперь все данные потока stdout будут записываться в файл, а не
// выводиться на экран.
mf=freopen (“test.txt”,”w”,stdout);
//Вывод строки в стандартный поток вывода (stdout). Строка
//должна записаться в файл test.txt
printf (“Проверка записи. Тест 2.”);
// Закрытие стандартного потока вывода stdout
fclose (mf);
return 0;
}
| |
Результат:
Вывод на консоль:
Содержимое файла:
Смотри так же:
fclose
fcloseall
fdopen
fileno
fopen
freopen
|