- •Міністерство освіти і науки України
- •Жуковецька с.Л., Шестопалов с.В.
- •Анотація
- •Введення
- •Лабораторна робота №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
7. Індівідуальні завдання
Визначити кількість файлів з зазначеним розширенням, що у заданому каталозі. Якщо таких файлів немає, то видати на екран повідомлення. Ім'я каталогу й розширення передаються в програму через параметри командного рядка.
Читати вміст зазначеного каталогу в файл. Якщо каталог порожній, видати на екран повідомлення. Ім'я каталогу вводиться з клавіатури.
Переглянути вміст поточного каталогу, ввести з клавіатури ім'я одного з файлів. Якщо цей файл має ненульову довжину, то вивести його вміст на екран. Якщо вказаний в параметрі командного рядка файл не має встановленого атрибуту дозволу для виконання, то необхідно встановити цей параметр.
Перевірити, чи є зазначений у параметрі файл каталогом. Вивести відповідну інформацію на екран. Якщо це каталог, то встановити дозвіл запису в цей каталог.
Вивести для певного каталогу імена текстових файлів, для яких дозволена запис. Ім'я каталогу задається через параметр командного рядка.
Вивести для каталогу (ім'я каталогу вводиться з клавіатури) список файлів, для яких дозволені виконання і читання.
Створити резервні копії текстових файлів, що мають атрибут дозволу для запису.
Читати вміст зазначеного каталогу в файл. Якщо каталог не порожній, видати на екран повідомлення. Ім'я каталогу передається через параметр командного рядка.
Роздрукувати з поточного каталогу містять цифри імена всіх файлів з розширеннями "*. c" і "*.cpp".
Створити в каталозі "./Links" символічні посилання на всі файли поточного каталогу з додаванням до імені файлу ".Link".
Копіювати в каталог, ім'я якого вводиться з клавіатури, файли, у яких ім'я починається з літер "a" або "z", якщо ці файли не є каталогами.
Лабораторна робота №7. Одержання і відображення метаданих файлу.
Мета: Оволодіння технологією отримання метаданих файлів різних типів. Застосування отриманих знань для написання програм.
Завдання для самостійної підготовки:
Вивчити:
поняття метеданих файлів ОС UNIX;
побудову та призначення системних стуктур зберігання метаданих;
зв’язок між різними типами структурами;
системні виклики отримання метаданих файлів.
Методичні вказівки
1. Механізми управління файлами ос unix
Операційна система розрізняє два типи управляння файлами: управління відкритими файлами та управління файлами, які зберігаються но жорсткому діску.
1. Для управління файлами, які зберігаються но жорсткому діску, система має структуру inode.
Загальним елементом у всіх 4-х типах файлів є те, що вони управляються через INODE, що є інформаційним ядром для файлів будь-якого типу, містить всі необхідні інформаційні дані й використовується системою.
Файли і їхні імена жорстко пов'язані з INODE. З одним INODE може бути зв'язано кілька імен, але кожн активний INODE зв'язується тільки з одним файлом. Це забезпечує доступ до одного фізичного файлу через кілька імен, пов'язаних із загальним INODE.
Атрибути файлу, такі як дозвіл на доступ і інші адміністративні дані, містяться в INODE. Крім того тут же втримуються адреси фактичних блоків даних.
Вміст INODE:
di_mode унікальний номер
file mode прапори прав доступу
di_count ідентифікатор користувача
di_uid ідентифікатор власника
di_gid ідентифікатор групи
di_size розмір файлу
di_addr[0]. адреса блоку даних
…
di_addr[n] адреса блоку даних
di_atime час останнього звертання до файлу
di_mtime час останньої модифікації файлу
di_ctime час останньої модифікації індексного
дескриптора
У кодах ядра посилання на INODE завжди починаються з посилання "di_". Вся інформація в INODE має тип "integer".
file mode - 2-х байтовый прапор, де перших 9 байтів задають право доступу (read/write) або дозвіл на виконання (файл типу exe). Ця інформація представляється у вигляді 3-х бітових полів, що задають зазначені права, відповідно для власника файлу, для груп директорій або для всіх директорій файлової системи. Наступний байт містить 4 біти, що визначають вид здійсненного (exe) файлу й тип файлу ( щовипливають 4 біти).
link count - поле, що вказує скільки директорій посилається на даний файл. Якщо в цьому полі коштує 0, то INODE не приєднаний ні до якого файлу, тобто файлу немає. Для директорій ця величина завжди => 2 (для батьківської директорії й для себе принаймні). Ця величина инкрементируется, якщо INODE одержує ім'я-синонім і декрементируется, якщо такоеимя вбирається.
group id - групи ідентифікаторів директорій, пов'язаних з файлом.
file size - розмір файлу в байтах, або 0 для спеціальних файлів.
Інші параметри ясні по своєму змісту.
Ядро UNIX містить таблицю i_list – список всіх активних INODE's. Таблиця i_list розташована на жорсткому диску і зберігається після виключення комп'ютера.
2. Для управління відкритими файлами ОС UNIX надає два базисні механізми: дескриптори (описувачі) файлу і потоки (файлові покажчики).
Дескриптори
Дескриптор файлу - це ціле число без знаку, за допомогою якого процес звертається до відкритого файлу.
FILE
Для кожного відкритого файлу в системі створюється структура fiIe, яка описує як відкритий файл, так і операції, які процес збирається проводити з файлом
Структура file містить такі поля, як:
ознака режиму відкриття;
покажчик на структуру vnode;
поточний зсув у файлі;
лічильник посилань на дану структуру;
покажчик на структуру, що містить права процесу, що відкрив файл (ця структура знаходиться в дескрипторі процесу);
покажчики на попередню і подальшу структури file, що зв'язують всі такі структури в подвійний список.
Для потокових файлів (наприклад, каналів і сокетів) поняття зсуву не підтримується, оскільки довільний доступ до цих файлів неможливий.
Обидва об'єкти відбиваються в спеціальних системних таблицях після відкриття файлу. Таблиця відкритих файлів створюється в оперативній пам'яті під час завантаження системи. Таблиця файлових дескрипторів створюється для кожного процесу. Зв'язок між таблицями:
Рисунок 1. – Системні структури керування файлами
Таблиця файлових дескрипторів
Дескриптори файлів виконують роль індексів таблиці дескрипторів, яка створюється ядром для кожного процесу. При відкритті файлу в цій таблиці шукається вільний осередок, в неї заноситься посилання на структуру file.
Кожен запис такої таблиці містить два поля: поле прапорів і покажчик на структуру файл. Найчастіше процес отримує дескриптори за допомогою операцій відкриття і створення файлів, а також шляхом спадкоємства від батьківського процесу.
Програма може використовувати дескриптори файлів з номерами 0..N. N визначене в include-файле <sys/param.h>.
[Щоб набути фактичного значення числа N, можна викликати функцію sysconf з аргументом _SC_OPEN_MAX, наприклад, так:
printf(“_SC_OPEN_MAX = %ld\n”, sysconf(_SC_OPEN_MAX));
У операційній системі Linux 2.4 ми отримаємо число 1024, в FREEBSD — 957, в Solaris — 256.]
Дескриптори є локальними для кожної програми. Тобто якщо дві програми відкрили один і той же файл - дескриптори цього файлу в кожній з них не обов'язково співпадуть (хоча і можуть). Назад: однакові дескриптори (номери) в різних програмах не обов'язково позначають один і той же файл. Декілька або один процесів можуть відкрити один і той же файл одночасно кілька разів. При цьому буде створено декілька структур, що "пов'язують" (по одній для кожного відкриття); кожна з них матиме СВІЙ покажчик читання/запису. Можлива і ситуація, коли декілька дескрипторів посилаються до однієї структури.
Таблиця відкритих файлів
Система має таблицю відкритих файлів. Об'єкти цієї таблиці є покажчиками на структуру file.
При закритті файлу зв'язна структура в ядрі знищується, осередок в таблиці вважається вільним, тобто зв'язок програми і файлу розривається.
При створенні процесу йому автоматично надаються три зумовлені потоки. Ці потоки оголошені в заголовному файлі "stdio.h".
FILE * stdin стандартний вхідний потік, який є нормальним джерелом введення для програми.
FILE * stdout потік стандартного виводу, який використовується для нормального виведення програми.
FILE * stderr стандартний потік помилки, який використовується для повідомлень про помилки і діагностики, виданою програмою.
Стандартним потокам відповідають стандартні дескриптори.
0 — вхідному потоку або STDIN_FILENO
1 — вихідному потоку або STDOUT_FILENO
2 — потоку помилок або STDERR_FILENO
У нормальному інтерактивному режимі роботи стандартний потік введення зв'язує процес з клавіатурою, а стандартні потоки виводу і виведення помилок – з поточним терміналом.