Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практичне заняття № 5 МЗКІТ (10 ТП).DOCX
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
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), але засоби АРІ для їхнього використання не визначені.