freopen – замена файла связанного с потоком данных.
Синтаксис:
#include
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
//Для 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; }
Результат:
Вывод на консоль:
Проверка записи. Тест 1.
Содержимое файла:
Проверка записи. Тест 2.
Смотри так же: