Операції над файлами

Операційна система повинна надати в розпорядження користувача набір операцій для роботи з файлами, реалізованих через системні виклики. Найчастіше при роботі з файлом користувач виконує не одну, а декілька операцій. По-перше, потрібно знайти дані файлу і його атрибути по символьному імені, по-друге, рахувати необхідні атрибути файлу у відведену область оперативної пам'яті і проаналізувати права користувача на виконання необхідної операції. Потім слід виконати операцію, після чого звільнити займану даними файлу область пам'яті. Розглянемо як приклад основні файлові операції ОС Unix [Таненбаум, 2002].

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

Видалення файлу і звільнення займаного їм дискового простору.

Відкриття файлу. Перед використанням файлу процес повинен його відкрити. Мета даного системного виклику - дозволити системі проаналізувати атрибути файлу і перевірити права доступу до нього, а також рахувати в оперативну пам'ять список адрес блоків файлу для швидкого доступу до його даних. Відкриття файлу є процедурою створення дескриптора або блоку файлу, що управляє. Дескриптор (описувач) файлу зберігає всю інформацію про нього. Іноді, відповідно до парадигми, прийнятої в мовах програмування, під дескриптором розуміється альтернативне ім'я файлу або покажчик на опис файлу в таблиці відкритих файлів, використовуваний при подальшій роботі з файлом . Наприклад, на мові Cи операція відкриття файлу fd=open(pathname,flags,modes); повертає дескриптор fd, який може бути задіяний при виконанні операцій читання (read(fd,buffer,count); ) або запису.

Закриття файлу. Якщо робота з файлом завершена, його атрибути і адреси блоків на диску більше не потрібні. В цьому випадку файл потрібно закрити, щоб звільнити місце у внутрішніх таблицях файлової системи.

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

Читання даних з файлу. Зазвичай це робиться з поточної позиції. Користувач повинен задати об'єм прочитуваних даних і надати для них буфер в оперативній пам'яті.

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

Є і інші операції, наприклад перейменування файлу, отримання атрибутів файлу і так далі

Існує два способи виконати послідовність дій над файлами [Оліфер, 2001].

У першому випадку для кожної операції виконуються як універсальні, так і унікальні дії (схема stateless). Наприклад, послідовність операцій може бути такій: open, read1, close ... open, read2, close ... open, read3, close.

Альтернативний спосіб - це коли універсальні дії виконуються на початку і в кінці послідовності операцій, а для кожної проміжної операції виконуються тільки унікальні дії. В цьому випадку послідовність наведених вище операцій виглядатиме так: open, read1 ... read2 ... read3, close.

Більшість ОС використовує другий спосіб, економічніший і швидший. Перший спосіб стійкіший до збоїв, оскільки результати кожної операції стають незалежними від результатів попередньої операції; тому він іноді застосовується в розподілених файлових системах (наприклад, Sun NFS).