- •Міністерство освіти і науки України
- •Жуковецька с.Л., Шестопалов с.В.
- •Анотація
- •Введення
- •Лабораторна робота №1 Технологія розробки програм у середовищі Linux
- •1. Команди роботи з командним інтерпретатором ос unix
- •2. Створення програми
- •3. Функції введення-виведення.
- •4. Приклад програми
- •5. Основні керуючі конструкції мови с
- •6. Індівідуальні завдання
- •Лабораторна робота № 2. Автоматизація пакетних завдань
- •1. Компіляція багатомодульною програми
- •2. Автоматизація пакетних завдань
- •4. Завдання
- •Лабораторна робота № 3. Взаємодія програми з середовищем виконання
- •1. Аргументи командного рядка
- •2. Змінні оточення
- •3. Індівідуальні завдання
- •Лабораторна робота №4. Контроль виконання програми
- •1. Коди завершення програми
- •2. Функції обробки значення errno
- •3. Функція atexit()
- •4. Макрос asssert()
- •5. Індівідуальні завдання
- •Лабораторна робота №5 Файлові api.
- •1 Основні поняття
- •2. Права доступу до файлів
- •3. Інтерфейси для файлового введення / виводу
- •4. Системні виклики роботи з файлами
- •5. Індівідуальні завдання
- •Варіанти завдань
- •Лабораторна робота №6 Робота з каталогами та посиланнями
- •Методичні вказівки
- •1. Створення та видалення каталогу
- •2. Читання каталогу
- •3. Зміна каталогу
- •4. Управління жорсткими посиланнями
- •5. Управління символічними посиланнями
- •6. Перейменування файлів і каталогів
- •7. Індівідуальні завдання
- •Лабораторна робота №7. Одержання і відображення метаданих файлу.
- •Методичні вказівки
- •1. Механізми управління файлами ос unix
- •2. Отримання даних індексного дескриптору
- •3. Додаткові функції маніпулювання даними індексних дескрипторів
- •4. Отримання даних про відкриті файли
- •5. Індівідуальні завдання
- •Лабораторна робота №8. Керування процесами
- •Методичні вказівки
- •1. Загальні поняття
- •2. Створення поцесу
- •4. Перезавантаження програми процесу
- •5. Завершення виконання процесу
- •6. Системні виклики wait, waitpid
- •7. Індівідуальні завдання
- •Лабораторна робота №9. Використання каналів
- •Методичні вказівки
- •1. Заганьні відомості
- •2. Використання каналів
- •3. Індівідуальні завдання
- •Варіанти завдань
- •Лабораторна робота №10 Використання повідомлень
- •Методичні вказівки
- •1. Загальні відомості
- •2. Використання повідомлень
- •3. Індівідуальні завдання
- •Література
- •Системне програмування Посібник до виконання лабораторних та самостійних робіт
- •65082, Одеса, вул. Дворянська, 1/3
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»: