Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Предопределенные указатели потоков.




Библиотека ввода-вывода языка Cи

 

Прототипы функций описаны в файле <stdio.h>. Основные идеи:

1. В Cи отсутствуют встроенные средства ввода-вывода. Весь ввод-вывод осуществляется через функции, находящиеся в библиотеке и легко замещаемые.

  1. Каждый файл рассматривается как непрерывный поток байт (stream). Никакой внутренней структуры файла не поддерживается.
  2. Не делается никаких различий между файлами на дисках и на других внешних устройствах.

 

Открытие потока.

Перед работой с любым файлом его надо предварительно открыть, т. е. связать с некоторой структурой предопределенного типа FILE, в которой находится вся необходимая информация для работы с потоком. Открытие потока осуществляется с помощью функции fopen, которая в случае успешного завершения возвращает указатель на структуру типа FILE, а в случае ошибки - NULL.

 

Полный ее прототип:

FILE *fopen (const char *filename, const char *mode);

где, filename - строка символов, содержащая имя файла (полное или простое), записанное по правилам DOS;

mode - режим работы файла, тоже строка символов;

"r" - открыть существующий файл для чтения;

"w" - создать файл для записи, информация из существующего файла теряется;

"a" - открытие для записи в конец существующего файла или создание для записи, если файла нет;

"r+" - открытие существующего файла для чтения и записи;

"w+" - создание нового файла для чтения и записи;

"a+" - открытие или создание для обновления в конец;

Закрытие потока.

После того как была выполнена вся работа с файлом, его необходимо закрыть. Это необходимо сделать по крайней мере по двум причинам:

  1. если программа обрабатывает большое количество файлов, то в конце концов может не хватить на все системных ресурсов;
  2. незакрытый файл может в случае сбоя пропасть.

 

Файл закрывается функцией:

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)

{... обработка ошибки переназначения... }

/* возврат стандартного вывода на консоль */

 






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных