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

3. Зміна каталогу

int chdir (char * pathname);

pathname - ім'я нового робочого каталогу

Функція chdir змінює поточний робочий каталог на каталог, який визначається за pathname; pathname повинен посилатися на існуючий каталог.

Функція chdir повертає значення 0, якщо робочий каталог успішно змінений. Повертане значення -1 вказує на помилку; в цьому випадку errno встановлюється в ENOENT, вказуючи, що задане path-ім'я не може бути знайдене. Помилки не виникають, якщо pathname визначає поточний робочий каталог.

Приклад: наступний оператор змінює поточний робочий каталог на кореневій

1) chdir ("/"); / * Зауваження: еквівалентно chdir ("\")

chdir ("..") / * вийти вгору * /

2) void lookdir (char * s, int ac, char ** av)

chdir (s)

3)chdir ("c: / temp");

c: \ \ temp Зауважимо, треба використовувати два зворотніх слеша (\ \) для представлення oдінoчного слеша (\). Зворотний слеш - цe escape-сімвoл для C-стрoк.

4. Управління жорсткими посиланнями

Запис у файлі каталогу, що містить ім'я і номер індексного вузла, називається жорсткою посиланням. Жорстка посилання з'являється при створенні файлу будь-якого типу, включаючи каталоги. Можна створити додаткові жорсткі посилання на файли, які не є каталогами, за допомогою системного виклику link:

link - створює жорстку посилання # include <unistd.h>

int link (const char * oldpath, const char * newpath)

oldpath, старе ім'я файлу

newpath нове ім'я файлу

Повертає 0 у разі успіху, -1 у випадку помилки (код помилки-в змінної errno)

Перший аргумент (oldpath) повинен бути ім'ям існуючої жорсткої посилання - вона представляє номер використовуваного індексного вузла. Другий аргумент (newpath) завдає ім'я нової жорсткої посилання. Стара і нова посилання абсолютно рівноправні, так як UNIX не розрізняє первинні і вторинні посилання. Процес, який створює жорстку посилання, повинен мати право на запис у каталог, де вона розміщуватиметься. Ім'я посилання, представленої у другому аргументі, не повинно існувати - системний виклик link не вміє змінювати існуючі посилання.

У разі необхідності, існуюче посилання можна видалити викликом unlink.

Т.к. жорсткі посилання є звичайними файлами, операції вводу-виводу для них стандартні (read, write).

5. Управління символічними посиланнями

Існує ще один тип посилань - символічні посилання/

На відміну від жорсткоuj посилання, символічнt посилання - новий файл особого типу, який зберігає рядок повного імені об'єкта в текстовому вигляді. Символічні посилання можуть посилатися на інші символічні посилання. Зазвичай, коли системному виклику open передається символічна посилання такого роду, ядро разименовивает їх по ланцюжку до тих пір, поки не зустріне об'єкт, який не є символічною посиланням. З жорсткими посиланнями цього не відбувається, тому що вони прямо посилаються на індексний вузол, який не може бути іншої жорсткої посиланням (хоча він може бути каталогом, який містить жорстку посилання). Іншими словами, якщо шлях до об'єкта визначається жорсткої посиланням, він може розглядатися буквально. Якщо символічної посиланням, то фактичний шлях до об'єкта залежить від вмісту проміжних символічних посилань.

Створюються символічні посилання системним викликом symlink:

# include <unistd.h>

int symlink (const char * oldpath, const char * newpath)

oldpath, можливе старе повне ім'я

newpath нове повне ім'я

Повертає 0 у разі успіху, -1 у випадку помилки (код помилки - у змінній errno)

Видалити символічну посилання можна за допомогою системного виклику unlink.

readlink - читає вміст файлу символічного посилання

# include <unistd.h>

ssize_t readlink (const char * path, char * buf, size_t bufsize)

path - повне ім'я

buf повертається текст

bufsize розмір буфера;

Повертає 0 у разі успіху, -1 у випадку помилки (код помилки-у змінній errno)

Системний виклик readlink повертає повне ім'я об'єкта посилання, але без завершальним символом «0», який в UNIX зазвичай служить маркером кінця рядка. Тому в якості третьої аргументу слід передавати число, на 1 менше фактичного розміру буфера, а після отримання заповненого буфера необхідно додати в нього символ «\ 0»:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]