Лабораторна робота №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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!