Розділ 17. Файлові структури даних
17.1. Загальні поняття
Якщо виникає потреба зберігати дані між сеансами роботи програми, тоді використовуються файли.
Під терміном “файл” розуміють сукупність даних, яка зберігається на зовнішньому носії та має своє ім’я. Це – фізичний файл або файл операційної системи.
Іншим значенням терміну “файл” є представник фізичного файла у програмі, що містить службову інформацію, необхідну для опрацювання файла. У такому випадку під файлом розуміють файлову змінну, логічний або програмний файл.
Аналогічно до консольного введення-виведення, термін “вивід” означає запис у файл, а термін “ввід” – зчитування з файла.
Загальна схема роботи з файлом:
- 1) оголосити файлову змінну;
- 2) відкрити файл;
- 3) виконати необхідні дії з файлом (опрацювання файла);
- 4) закрити файл.
Якщо програма повинна зчитувати дані з файла чи записувати дані у файл, то такий файл необхідно відкрити. При цьому виділяється канал зв’язку з файлом та утворюються системні буфери для обміну інформацією.
Буфер обміну (файловий буфер) – це область пам’яті, яка виділяється операційною системою і призначена для накопичення інформації, що повинна бути записана у файл, чи інформації, зчитаної з файла. Потреба в буфері обміну зумовлена необхідністю підвищення швидкодії файлових операцій зчитування-запису, оскільки взаємодія із зовнішніми носіями відбувається значно повільніше, ніж дії з пам’яттю.
У кожний момент часу програма опрацьовує лише одну поточну компоненту файла. Такий підхід дає змогу економити пам’ять, оскільки, з точки зору, використання внутрішня (оперативна) пам’ять набагато дорожча від зовнішньої (дискової), тому набагато дешевше в оперативній пам’яті тримати лише ту частину інформації, яку в даний момент опрацьовує програма, а всі інші частини зберігати на диску.
Для позначення поточної компоненти файла використовується файловий вказівник (вказівник поточної позиції) – це службова змінна, яка створюється автоматично при створенні файлової змінної. Після виконання операцій зчитування-запису відповідний файловий вказівник автоматично переходить до наступної компоненти файлу.
Після завершення опрацювання файла файловий вказівник необхідно закрити. При цьому виконуються такі дії:
- Вміст буфера обміну примусово переноситься на зовнішній носій, тобто у файл;
- Буфер знищується – звільняється область пам’яті, що була виділена для системного буфера обміну;
- Звільняється канал зв’язку – розривається зв’язок між файловою змінною та фізичним файлом;
- Після останньої компоненти файла записується мітка “кінець файла”.
17.2. Типи файлів
Усі файли за способом трактування їх вмісту можна поділити на дві категорії: текстові та двійкові (бінарні).
У текстових файлах інформація автоматично конвертується: при введенні – із внутрішнього подання до текстового, при виведенні – із текстового подання у внутрішнє. При цьому, текстове (символьне) подання інформації означає, що всі символи у текстовому файлі поділяються на два види: звичайні символи, які відображаються текстовими редакторами, та форматні символи, які ними не відображаються, а використовуються для відображення звичайних символів.
Переваги використання текстових файлів:
- читабельність інформації;
- при втраті декількох байт текстового файлу інформацію часто можна відновити за змістом.
Недоліки використання текстових файлів:
- інформацію, записану в текстовий файл часто дуже важко перетворити до початкової форми (до моменту запису);
- у текстовий файл складно зберегти об’єкт повністю, наприклад, для збереження масиву у файл необхідно зберігати його поелементно.
У двійкових файлах інформація подається у внутрішньому поданні – у двійкових кодах, які використовуються комп’ютером. Мітка “кінець файла” для бінарних файлів поняття умовне, жодних спеціальних символів для неї не передбачено, вона реалізується записом у відповідному каталозі реальної довжини файла.
Переваги використання двійкових файлів:
- інформація з двійкового файлу програмно зчитується без особливих проблем;
- програмний запис об’єктів у двійковий файл виконується без особливих проблем.
Недоліки використання двійкових файлів:
- втрата декількох байт у двійковому файлі може бути незворотна (файл може виявитися “нечитабельним”) ;
- двійковий файл не є читабельним, при його відкритті текстовим редактором відображається набір символів;
- редагування інформації в двійковому файлі без спеціальної програми практично неможливо.
17.3. Потоки та файли
У системі введення-виведення мови С для програм підтримується єдиний інтерфейс, який не залежить до якого конкретного пристрою здійснюється доступ. Між програмою та пристроєм розміщується узагальнений пристрій введення або виведення, який називається потоком, а сам цей пристрій називається файлом.
(Для ознайомлення з повним текстом статті необхідно залогінитись)