Доступ до даних в UNIX

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

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

UNIX не має коштів управління поділом доступу при відкритті файлу, тобто завжди дозволяє декільком процесам відкривати один і той же файл. Для забезпечення коректної роботи процеси можуть використовувати блокування фрагментів файлу. Можна встановити блокування для запису (ексклюзивну блокування, див. п. 3.5) або для читання (кооперативну блокування). За замовчуванням в UNIX використовуються рекомендаційні блокування. Це означає, що система не перешкоджає процесу звертатися до заблокованого фрагменту файлу. Процес повинен сам запитувати (якщо вважає за потрібне), чи не заблокований даний фрагмент. У більш пізніх версіях UNIX стало можливим і обов'язкове блокування, при якому спроба звернення до заблокованого фрагменту призводить до помилки.

Для реалізації доступу до файлу за значенням хендл в UNIX використовуються таблиці, аналогічні таблицям JFT і SFT в MS-DOS (див. п. 3.6.4.3). Однак, на відміну від MS-DOS, запис SFT не містить копії всіх атрибутів файлу. Замість цього UNIX зберігає в пам'яті окрему таблицю копій індексних дескрипторів (inode) всіх відкритих файлів. Запис SFT містить посилання на запис таблиці індексних дескрипторів, а понад те - ті параметри, яких немає в inode: режим доступу до відкритого файлу, положення покажчика у файлі, кількість хендл, що вказують на дану запис SFT. Якщо один і той же

файл був відкритий кілька разів, то створюється кілька записів SFT, що вказують на один і той же inode.