Лабораторна робота №7. Одержання і відображення метаданих файлу
Мета:Оволодіння технологією отримання метаданих файлів різних типів. Застосування отриманих знань для написання програм.
Завдання для самостійної підготовки:
Вивчити:
− поняття метеданих файлів ОС UNIX;
− побудову та призначення системних стуктур зберігання метаданих;
− зв’язок між різними типами структурами;
− системні виклики отримання метаданих файлів.
Методичні вказівки
Механізми управління файлами ОС 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
У нормальному інтерактивному режимі роботи стандартний потік введення зв'язує процес з клавіатурою, а стандартні потоки виводу і виведення помилок – з поточним терміналом.
Дата добавления: 2018-04-05; просмотров: 380; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!