Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СПОС_Конспект.doc
Скачиваний:
39
Добавлен:
02.05.2019
Размер:
1.13 Mб
Скачать

8. 3. Зв’язки

Структура каталогів файлової системи не завжди є деревом. Багато файлових систем дає змогу задавати кілька імен для одного й того самого файла. Такі імена називають з’явзками (links). Розрізняють жорсткі і символічні з’явзки.

8. 3. 1. Жорсткі зв’язки

Ім’я файла не завжди однозначно пов’язане з його даними. За підтримки жорстких зв’язків (hard links) для файла допускається кілька імен. Усі жорсткі зв’язки визначають одні й ті самі дані на диску, для користувача вони не відрізняються: не можна визначити, які з них були створені раніше, а які – пізніше.

Підтримка жорстких зв’язків у POSIX

Для створення жорстких зв’язків у POSIX призначений системний виклик link(). Першим параметром він приймає ім’я вихідного файла, другим -ім’я жорсткого зв’язку, що буде створений:

#include<unistd.h> // для стандартних файлових операцій POSIX

link (“myfile.txt” , “myfile_hardlink.txt”);

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

// вилучити файл, якщо в нього був один жорсткий зв’язок

unlink (“myfile.txt”);

Підтримка жорстких зв’язків у Windows XP

Жорсткі зв’язки здебільшого реалізовані в Unix-сумісних системах, їх підтримують також у системах лінії Windows XP для файлової системи NTFS. Для створення жорсткого зв’язку в цій системі необхідно використати функцію CreateHardLink(), ім’я зв’язку задають першим параметром, ім’я файла – другим, а третій дорівнює нулю:

CreateHardLink (“myfile_hardlink.txt” , “myfile.txt”, 0);

Для вилучення жорстких зв’язків у Win32 API використовують функцію DeleteFile():

DeleteFile (“myfile_ hardlink.txt”);

Зазначимо, що для файлових систем, які не підтримують жорстких зв’язків, виклик DeleteFile() завжди спричиняє вилучення файла.

Жорсткі зв’язки мають певні недоліки, які обмежують їх застосування:

  • Не можуть бути задані для каталогів;

  • Усі жорсткі зв’язки одного файла завжди мають перебувати на одному й тому самому розділі жорсткого диска (в одній файловій системі);

  • Вилучення жорсткого зв’язку потенційно може спричинити втрати даних файла

8. 3. 2. Символічні зв’язки

Основні поняття

Символічний зв’язок (symbolic link)-зв’язок, фізично відокремлений від даних, на які вказує. Фактично це спеціальний файл, що містить ім’я файла, на який вказує. Наведемо властивості символічних зв’язків.

  • Через такий зв’язок здійснюють доступ до вихідного файла.

  • При вилученні зв’язку, вихідний файл не зникне.

  • Якщо вихідний файл перемістити, або вилучити, зв’язок розірветься, і доступ через нього стане неможливий, якщо файл потім поновити на тому самому місці, зв’язком знову можна користуватися.

  • Символічні зв’язки можуть вказувати на каталоги і файли, що перебувають на інших файлових системах (на іншому розділі жорсткого диска). Наприклад, якщо створити в поточному каталозі зв’язок system-docs, що вказує на каталог /usr/doc, то перехід у каталог system-docs призведе до переходу в каталог /usr/doc.