Потоки и файлы

Фундаментом понимания системы ввода-вывода C (и С++) является концепция потоков и файлов.

Система ввода-вывода предоставляет уровень абстракции между программистом и аппаратными средствами, которая связана с понятием потока. Каждое из устройств (терминал, дисковые накопители и др.) имеет свои особенности, но система преобразует их в единое логическое абстрактное устройство, называемое потоком. Потоки похожи своим поведением и не зависят от устройств. Другими словами, одни и те же или похожие функции можно использовать для записи информации как на диск, так и на другое устройство. Таким образом, для пользователя поток — это либо файл на диске, либо физическое устройство (например, дисплей или принтер). Поэтому когда пользователь выполняет операции ввода-вывода для потока, то имеется ввиду, что он работает либо с файлом, либо с каким-нибудь устройством.

Файлы — это логическая концепция, которая применима к любому устройству (дисковые файлы, терминал и др.). Не все файлы имеют одинаковые возможности. Например, дисковый файл поддерживает произвольный доступ, а модем — нет. Поэтому можно сказать, что потоки одинаковы, а файлы разные.

Есть два типа потоков: текстовые и двоичные.

Текстовые потоки представляют собой последовательность символов, часть из которых могут преобразовываться. Например, при выводе символ новой строки может преобразовываться в два символа: “возврат каретки” и “перевод строки”. А при вводе выполняется обратное преобразование. Отсюда следует, что может не быть однозначного соответствия между записываемыми или считываемыми символами и символами во внешнем устройстве. Кроме этого, количество прочитанных или записанных символов может не совпадать с количеством символов во внешнем устройстве.

Двоичные потоки — последовательность байт, имеющих однозначное соответствие с байтами во внешнем устройстве. Никакого преобразования символов не выполняется. Поэтому количество прочитанных (записанных) байт в точности совпадает с количеством байт во внешнем устройстве.

Тип потока указывается при открытии файла с помощью буквы t или b во втором параметре функции fopen (см. 1.3).


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



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