Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lec_11_Pres.doc
Скачиваний:
4
Добавлен:
05.12.2018
Размер:
377.86 Кб
Скачать

1. Файли і потоки, буферизація даних

У мові С файл є достатньо абстрактним поняттям, яким позначається джерело надходження даних або місце їх нагромадження. Файлом вважається не тільки іменована сукупність даних, розташованих на зовнішньому носії (наприклад, дисковий файл), а й термінальний пристрій (наприклад, клавіатура або принтер).

Це означає, що файли можуть мати зовсім різні характеристики. Наприклад, до даних, записаних у файлі на диску, можна виконувати прямий доступ, а введення даних з клавіатури може бути тільки послідовним.

Для уніфікації процесів файлового обміну даними у функціях високорівневого введення/виведення мови С використовують поняття потоку (stream), тобто послідовності байтів, що надходять від певного логічного пристрою (файлу) або передаються у цей пристрій (файл).

Щоб узагальнити обмін даними як для пристроїв, що підтримують побайтове передавання (клавіатура, дисплей, принтер), так і для пристроїв, що передбачають обмін блоками байтів (дискові файли), у процесах введення/вив здійснюється проміжна буферизація даних.

Буферизація полягає в наступному. Для кожного відкритого файлу в оперативній пам'яті створюється буфер обміну заданої ємності. Здебільшого ємність буфера для дискових файлів приймається кратною ємності сектора диска (а сам сектор 1024, 2048 байтів), щоб забезпечити максимальну ефективність операцій обміну файл відкривається для читання, то буфер введення відразу заповнюється початковою порцією байтів цього файлу. Коли всі дані з буфера зчитано, автоматично виконується наступне звертання до файлу і в буфер заноситься нова порція байтів. Якщо ж здійснюється запис даних у файл, то вони спочатку заносяться у буфер виведення, а вже потім переписуються у файл за кожної з умов:

1 - заповнено весь буфер,

2 - виконано очищення буфера,

3 - відбувається закриття файлу,

4 - програма завершує роботу стандартним чином (неаварійно).

Буферизація забезпечує високу швидкодію операцій і мінімізує кількість звертань до фізичних пристроїв, які найбільше гальмують процеси введення/виведення.

Підсумовуючи, відзначимо, що високорівневий потоковий обмін даними - це обмін байтами з фізичними файлами і логічними пристроями через систему буферизації, що дає змогу опрацьовувати дані різних форматів і розмірів.

2. Групи функцій для роботи з потоками

Всі бібліотечні функції високорівневого потокоорієнтованого буферизованого введення/виведення оголошені в заголовному файлі <stdio.h>. У цьому ж файлі визначені макроконстанти, внутрішні змінні, а також спеціальні структурні типи які використовуються цими функціями.

Набір функцій для роботи з потоками можна поділити на групи:

  • функції відкриття/закриття та перескерування потоків;

  • функції введення/виведення даних;

  • функції звертання до вказівник а позиції файла;

  • функції контролю стану файла та помилок введення/виведення;

  • функції керування буферизацією;

  • інші допоміжні функції.

Далі охарактеризуємо функції кожної з цих груп і наведемо приклади їх використання.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]