- •Логічна організація файлових систем
- •11.1. Поняття файла і файлової системи
- •11.1.1. Поняття файла
- •11.1.2. Поняття файлової системи
- •11.1.3. Типи файлів
- •11.1.4. Імена файлів
- •11.2. Організація інформації у файловій системі
- •11.2.1. Розділи
- •11.2.2 Каталоги
- •11.2.3. Зв’язок розділів і структури каталогів
- •11.3. Зв’язки
- •11.3.1. Жорсткі зв’язки
- •11.3.2. Символічні зв’язки
- •11.4. Атрибути файлів
- •11.5. Операції над файлами і каталогами
- •11.5.1. Підходи до використання файлів процесами
- •11.5.2. Загальні відомості про файлові операції
- •11.5.3. Файлові операції posix
- •11.5,4. Файлові операції Win32 api
- •11.5.5. Операції над каталогами
- •11.6. Міжпроцесова взаємодія на основі інтерфейсу файлової системи
- •11.6.1. Файлові блокування
- •11.6.2. Файли, що відображаються у пам’ять
- •11.6.3. Поіменовані канали
- •Висновки
- •Контрольні запитання та завдання
11.3. Зв’язки
Структура каталогів файлової системи не завжди є деревом. Багато файлових систем дає змогу задавати кілька імен для одного й того самого файла. Такі імена називають зв'язками (links). Розрізняють жорсткі та символічні зв’язки.
11.3.1. Жорсткі зв’язки
Ім’я файла не завжди однозначно пов’язане з його даними. За підтримки жорстких зв’язків (hard links) для файла допускається кілька імен. Усі жорсткі зв’язки визначають одні й ті самі дані на диску, для користувача вони не відрізняються: не можна визначити, які з них були створені раніше, а які — пізніше.
Підтримка жорстких зв’язків у POSIX
Для створення жорстких зв’язків у POSIX призначений системний виклик
lіnk(). Першим параметром він приймає ім’я вихідного файла, другим — ім’я жорсткого зв’язку, що буде створений:
Зазначимо, що стандартні засоби вилучення даних за наявності жорстких зв’язків працюватимуть саме з ними, а не безпосередньо із файлами. Замість системного виклику вилучення файла використовують виклик вилучення зв’язку (який зазвичай називають unlink( )), що вилучатиме один жорсткий зв’язок для заданого файла. Якщо після цього зв’язків у файла більше не залишається, його дані також вилучаються.
Підтримка жорстких зв’язків у Windows ХР
Жорсткі зв’язки здебільшого реалізовані в UNIX-сумісних системах, їх підтримують також у системах лінії Windows ХР для файлової системи NTFS. Для створення жорсткого зв’язку в цій системі необхідно використати функцію CreateHardLink( ), ім’я зв’язку задають першим параметром, ім’я файла — другим, а третій дорівнює нулю:
Для вилучення жорстких зв’язків у Win32 АРІ використовують функцію DeleteFile( ):
Зазначимо, що для файлових систем, які не підтримують жорстких зв’язків, виклик DeleteFile( ) завжди спричиняє вилучення файла.
Жорсткі зв’язки мають певні недоліки, які обмежують їх застосування:
♦ не можуть бути задані для каталогів;
♦ усі жорсткі зв’язки одного файла завжди мають перебувати на одному й тому самому розділі жорсткого диска (в одній файловій системі);
♦ вилучення жорсткого зв’язку потенційно може спричинити втрати даних файла.
11.3.2. Символічні зв’язки
Основні поняття
Символічний зв’язок (symbolic link) — зв’язок, фізично відокремлений від даних, на які вказує. Фактично, це спеціальний файл, що містить ім’я файла, на який вказує. Наведемо властивості символічних зв’язків.
♦ Через такий зв’язок здійснюють доступ до вихідного файла.
♦ При вилученні зв’язку, вихідний файл не зникне.
♦ Якщо вихідний файл перемістити або вилучити, зв’язок розірветься, і доступ через нього стане неможливий, якщо файл потім поновити на тому самому місці, зв’язком знову можна користуватися.
♦ Символічні зв’язки можуть вказувати на каталоги і файли, що перебувають на інших файлових системах (на іншому розділі жорсткого диска). Наприклад, якщо створити в поточному каталозі зв’язок system-docs, що вказує на каталог /usr/doc, то перехід у каталог system-docs призведе до переходу в каталог /usr/doc
Підтримка символічних зв’язків на рівні системних викликів
Для задання символічного зв’язку у POSIX визначено системний виклик symlink( ), параметри якого аналогічні до параметрів link( ):
Для отримання шляху до файла або каталогу, на який вказує символічний зв’язок, використовують системний виклик readlink( ).
Символічні зв’язки вперше з’явилися у файлових системах UNIX, у Windows ХР вони підтримуються файловою системою NTFS під назвою точок з’єднання (junction points), але засоби АРІ для їхнього використання не визначені.
