Потоки стандартного ввода-вывода

Каждая Си-программа при исполнении получает уже открытыми пять файлов стандартного ввода-вывода, указатели-константы на которые в виде символических имен стандартных потоков (устройств ввода-вывода) определены в файле stdio.h:

stdin – указатель на входной буфер при вводе с клавиатуры (устройство CON – консоль);

stdout – указатель на выходной буфер при выводе на экран консоли;

stderr – указатель для вывода сообщений на экран консоли;

stdaux – указатель для связи с дополнительным устройством (AUX, COM1);

stdprn – указатель для вывода на устройство печати (PRN).

Файл stdin открывается для программы только для чтения, файлы stdout, stderr, stdprn – только для записи, файл stdaux – для чтения и записи. Указатели стандартных потоков могут использоваться так же, как указатели на переменную типа FILE для потоков, открытых программистом в программе. Они же используются по умолчанию в стандартных функциях ввода с клавиатуры и вывода на экран.

В файле заголовков stdio.h заданы также константы, используемые при работе с файлами:

NULL – нулевой байт, возвращаемый как NULL-указатель в случае ошибки при открытии файла;

EOF – значение конца файла (–1).

Повторное открытие файла

Закрытый файл можно открыть заново с другим типом доступа. Открытый файл можно повторно открыть и изменить права доступа одной функцией

вида

freopen (“имя_файла“, ”тип_доступа”, указатель_потока),

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

Повторное открытие того же самого файла изменяет права доступа, очищает внутренние буферы и позиционирует указатель записи-чтения либо на начало (r, w, r+, w+), либо на конец (a, a+) файла. Например, в рассмотренном выше примере открытия файла myfile функция

freopen (path, “r”, myfile);

повторно откроет файл с именем, заданным в строке с указателем path, и на который ссылается указатель myfile, с режимом доступа только для чтения.

Если файлы разные, повторное открытие приводит к переадресации потока ввода-вывода. Например, строка программы

freopen (“c:\\file1.tmp ”, “w”, stdout);

выполняет переадресацию стандартного вывода во временный файл c:\file1.tmp.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: