ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Предопределенные указатели потоков.Библиотека ввода-вывода языка Cи
Прототипы функций описаны в файле <stdio.h>. Основные идеи: 1. В Cи отсутствуют встроенные средства ввода-вывода. Весь ввод-вывод осуществляется через функции, находящиеся в библиотеке и легко замещаемые.
Открытие потока. Перед работой с любым файлом его надо предварительно открыть, т. е. связать с некоторой структурой предопределенного типа FILE, в которой находится вся необходимая информация для работы с потоком. Открытие потока осуществляется с помощью функции fopen, которая в случае успешного завершения возвращает указатель на структуру типа FILE, а в случае ошибки - NULL.
Полный ее прототип: FILE *fopen (const char *filename, const char *mode); где, filename - строка символов, содержащая имя файла (полное или простое), записанное по правилам DOS; mode - режим работы файла, тоже строка символов; "r" - открыть существующий файл для чтения; "w" - создать файл для записи, информация из существующего файла теряется; "a" - открытие для записи в конец существующего файла или создание для записи, если файла нет; "r+" - открытие существующего файла для чтения и записи; "w+" - создание нового файла для чтения и записи; "a+" - открытие или создание для обновления в конец; Закрытие потока. После того как была выполнена вся работа с файлом, его необходимо закрыть. Это необходимо сделать по крайней мере по двум причинам:
Файл закрывается функцией: int fclose (FILE *stream); где, stream - указатель потока.
Функция возвращает 0 в случае успеха и EOF - если нет. EOF - (End Of File) - специальная константа из <stdio.h>.
Функция fcloseall закрывает все потоки: int fcloseall (void);
В случае успеха функция возвратит количество закрытых потоков, иначе - EOF. Если программист забыл закрыть какие-либо потоки, то все равно они будут закрыты системой MS DOS по завершению работы программы.
Типичный пример работы с файлом: <stdio.h> . . . void main (void) { FILE *my_file; static char fn[] = "d:\\USER\\f.dat"; . . .
if ((my_file = fopen (fn, "r")) == NULL) { printf ("Не могу открыть файл %s\n", fn); return; } . . . fclose (my_file); }
Предопределенные указатели потоков. С началом выполнения C-программы автоматически открывается пять потоков. Их указатели имеют предопределенные имена и представляют константы типа указателя на структуру FILE. stdin - стандартный поток ввода; stdout - стандартный поток вывода; stdprn - стандартный поток вывода на печать; stdaux - стандартный дополнительный поток; stderr - стандартный вывод сообщений об ошибке.
Имена этих потоков можно использовать везде, где допускаются имена потоков без предварительного открытия соответствующего потока. Имеется целый ряд специальных функций работы со стандартными потоками ввода-вывода (в основном stdin и stdout). Мы их частично рассматривали (например, printf). Поскольку указатели стандартных потоков являются константами, им нельзя присваивать значений. Но любой стандартный поток может переопределяться с помощью функции freopen.
FILE *freopen (const char *fn, const char *mode, FILE *stream);
stream - указатель существующего потока, в том числе стандартного.
Функция возвращает stream в случае успеха, иначе - NULL. Пример: if (freopen ("d:\\a.std", "w", stdout) == NULL) {... обработка ошибки открытия... } /* переназначение стандартного вывода на диск */
if (freopen ("CON", "w", stdout) == NULL) {... обработка ошибки переназначения... } /* возврат стандартного вывода на консоль */
Не нашли, что искали? Воспользуйтесь поиском:
|