Книга: Язык Си - руководство для начинающих
БУФЕРЫ
БУФЕРЫ
При выполнении данной программы (любой из двух ее версий) вводимый символ в одних вычислительных системах немедленно появляется на экране ("эхо-печать"), в других же ничего не происходит до тех пор, пока вы не нажмете клавишу [ввод]. Первый случай относится к так называемому "небуферизованному" ("прямому") вводу, означающему, что вводимый символ оказывается немедленно доступным ожидающей программе. Второй случай служит примером "буферизованного" ввода, когда вводимые символы собираются и помешаются в некоторую область временной памяти, называемую "буфером". Нажатие клавиши [ввод] приводит к тому, что блок символов (или один символ) становится доступным программе. В нашей программе применяется только первый символ, поскольку функция getchar( ) вызывается в ней один раз. Например, работа нашей программы в системе, использующей буферизованный ввод, будет выглядеть следующим образом:
Вот длинная входная строка. [ввод] В
В системе с небуферизованным вводом отображение на экране символа В произойдет сразу, как только вы нажмете соответствующую клавишу. Результат ввода-вывода при этом может выглядеть, например, так:
ВВот длинная входная строка
Символ В, появившийся на второй позиции данной строки, - это непосредственный результат работы программы. В каждом случае, программой обрабатывается только один символ, поскольку функция getchar( ) вызывается лишь один раз.
РИС. 6.2. Схема буферизованного и небуферизованного ввода
Зачем нужны буферы? Во-первых, оказывается, что передачу нескольких символов в виде одного блока можно осуществить гораздо быстрее, чем передавать их последовательно по одному. Во-вторых, если при вводе символов допущена ошибка, вы можете воспользоваться корректирующими средствами терминала, чтобы ее исправить. И когда в конце концов вы нажмете клавишу [ввод], будет произведена передача откорректированной строки.
Однако для некоторых диалоговых программ небуферизованный ввод может оказаться приемлемым. Например, в программах обработки текстов было бы желательно, чтобы каждая команда вводилась, как только вы нажимаете соответствующую клавишу. Поэтому как буферизованный, так и небуферизированный ввод имеет свои достоинства.
- ВВОД И ВЫВОД ОДНОГО СИМВОЛА: ФУНКЦИИ getchar( ) И putchar( )
- БУФЕРЫ
- СЛЕДУЮЩИЙ ШАГ
- ПЕРЕКЛЮЧЕНИЕ И РАБОТА С ФАЙЛАМИ
- ОПЕРАЦИОННАЯ СИСТЕМА UNIX.
- СИСТЕМНО-ЗАВИСИМЫЕ СРЕДСТВА: ПОРТЫ ВВОДА-ВЫВОДА МИКРОПРОЦЕССОРОВ INTEL 8086/8088
- ИСПОЛЬЗОВАНИЕ СКРЫТОЙ МОЩНОСТИ (В ЛОШАДИНЫХ СИЛАХ) ВАШЕГО КОМПЬЮТЕРА
- ВЫ ДОЛЖНЫ БЫЛИ УЗНАТЬ В ЭТОЙ ГЛАВЕ
- ВОПРОСЫ И ОТВЕТЫ
- УПРАЖНЕНИЯ
- 1.6 Драйверы и буферы ввода-вывода
- Буферы и заголовки буферов
- 6.2.4. Таймеры, задержки и буферы
- 22.5. Типизированные массивы и буферы
- Устройство ввода-вывода
- Глава 4 Файлы и файловый ввод
- 4.4. Ввод и вывод
- 5.3.3. Индикаторы для логического выхода с тремя состояниями
- УПРАЖНЕНИЯ
- Операции ввода
- Интерфейс доступа низкого уровня
- Драйвер