Лабораторная работа: Организация ввода-вывода

В этом случае все, что шло в поток stdout, пойдет в файл ex.txt.

Например,

#include <stdio.h>

#include <conio.h>

#include <mem.h>

void main()

{

clrscr();

FILE *fp = fopen("exl.txt", "w+");

if(fp = NULL)

{

рerrоr("Ошибка при открытии файла"); // вывод в stderr return;

};

FILE *pbuf=stdin; int с = getc(stdin);

fclose(fp);

}

Функция fgetc и макрокоманда getc

Прототипы:

int fgetc(FILE *stream);

int getc(FILE *stream);

Возвращает: символ, расширенный до int без продолжения знака. В случае ошибки или конца файла возвращает EOF ( = -1 = 0xFFFF).

Описание. Считывает очередной символ из входного потока и увеличивает указатель текущего положения (СР - current position) на 1. При вводе с клавиатуры (stream=stdin) выполняется после нажатия клавиши Enter. Макрокоманда getc полностью аналогична функции fgetc. В файле stdio.h определена, как

#define getc(f) ((--((f)->level) >= 0) ? (unsigned char)(*(f)-->curp++) \ :_fgetc (f))

Разберите синтаксис этого макроса !

Хотя getc и fgetc аналогичны, но лучше пользоваться макросом по следующей причине. Чтение из файла происходит блоками по 256b, 512b и т.д. После обработки одного блока в ОЗУ с диска считывается следующий блок. Макрос работает с текущим блоком напрямую, как видно из определения, и обращается к функции fgetc только после обработки этого блока. Функция fgetc также работает с блоком в ОЗУ, но каждое обращение к нему реализуется через вызов функции. Таким образом, использование getc увеличивает скорость за счет увеличения кода. Использование fgetc уменьшает код ценой уменьшения скорости.

Функция fgetchar и макрокоманда getchar

Прототипы: int fgetchar(void);

int getchar(void);

Возвращает : символ, расширенный до int без продолжения знака. В случае ошибки или конца файла возвращает EOF. Описание. Считывает очередной символ из стандартного входного потока и увеличивает СР на 1. Поток stdin, как и любой открытый файл, имеет буфер с размером по умолчанию 512b. Функция выполняется после нажатия клавиши Enter, после чего вводит 1 символ. Остальные введенные символы остаются в буфере, ожидая своей участи. Макрос getchar аналогичен функции fgetchar.

Функции getch и getche

Прототипы: int getch(void);

int getche(void);

К-во Просмотров: 510
Бесплатно скачать Лабораторная работа: Организация ввода-вывода