Организация С#-системы ввода-вывода
Оценка 4.6

Организация С#-системы ввода-вывода

Оценка 4.6
docx
18.11.2021
Организация С#-системы ввода-вывода
Л2-002141.docx

Организация С#-системы ввода-вывода

Понятие потока

Внешние устройства делятся на:

       Устройства ввода-вывода (дисплей, клавиатура, принтер, после- довательный порт, мышь, сканер и т.д.)

       Запоминающие устройства последовательного доступа (стример)

       Запоминающие устройства прямого доступа (МД, CD-ROM, DVD- ROM);

 

С#-программы выполняют операции ввода-вывода посредством пото- ков. С точки зрения концепции ввода/вывода, поток (stream) — это аб- стракция, которая определяется как последовательность байтов, участ- вующих в операции ввода/вывода и независящая от устройства.

С точки зрения реализации, поток – это объект, используемый для передачи данных.

 

Концепция передачи данных отделена от конкретного источника, по- этому источники можно заменять. Внешним источником может быть даже переменная программы. Характер поведения всех потоков одинаков, по- этому создано множество обобщенных методов, предназначенных для перемещения данных между внешними источниками и переменными про- граммы. Нюансы различных физических устройств потоковыми методами во внимание не принимаются.

 

Следовательно, классы и методы, работающие с потоками, можно применить ко многим типам устройств. Например, методы, используемые для записи данных на консольное устройство, также можно использовать для записи в дисковый файл.


рис.1

 

На самом низком уровне все С#-системы ввода-вывода оперируют байтами. На физическом уровне Windows используется буферизация и кэширование записей. Их целью является:

       согласование ввода/вывода с характеристиками внешнего устрой- ства;

       повышение эффективности системы, за счет уменьшения количе- ства операций ввода/вывода с внешними устройствами, например, с диском.


Буферизованный ввод-вывод:

 

Windows

 

 


 

NTFS


Файлблок


буфер ОС

блок


строка символ


 

 

рис.2

 

Буфер заполняется блоками (кластерами): первый раз при открытии файла для чтения.

Буферов может быть несколько.

 

 

 

 

 

 

 

 

 

• ••Буферы

 

 

 

см. Flush

 

рис. 3

 

Синхронный и асинхронный ввод/вывод

Как правило, после запуска операции ввода-вывода программа пере- ходит в состояние ожидания и выходит из него только после завершения обмена. Такой способ выполнения операций ввода-вывода называется синхронным.

Однако продолжительный ввод-вывод целесообразно выполнять в асинхронном режиме, когда программа не блокируется, а продолжает выполняться. Асинхронный режим реализуется с помощью подпрограммы обратного вызова (на рис.4 – ПОВ). Об этом пойдет речь в других лекци- ях.

 

 

 

 

 

рис.4


0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

t

Стандартные потоки

В С# определен ряд классов, которые преобразуют байтовый поток в символьный, и наоборот, выполняя byte-char- и char-byte-перевод авто- матически.

Наряду с байтовыми и символьными потоками существуют двоичные потоки.

Кроме потоков, создаваемых программами, в Windows существуют не- сколько встроенных (стандартных) потоков.

Эти потоки не надо создавать, они всегда доступны программам.

 


 

Организация С#-системы ввода-вывода

Организация С#-системы ввода-вывода

Буферизованный ввод-вывод:

Буферизованный ввод-вывод:

Стандартные потоки В С# определен ряд классов, которые преобразуют байтовый поток в символьный, и наоборот, выполняя byte-char- и char-byte-перевод авто- матически

Стандартные потоки В С# определен ряд классов, которые преобразуют байтовый поток в символьный, и наоборот, выполняя byte-char- и char-byte-перевод авто- матически
Скачать файл