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

7. Індівідуальні завдання

  1. Визначити кількість файлів з зазначеним розширенням, що у заданому каталозі. Якщо таких файлів немає, то видати на екран повідомлення. Ім'я каталогу й розширення передаються в програму через параметри командного рядка.

  2. Читати вміст зазначеного каталогу в файл. Якщо каталог порожній, видати на екран повідомлення. Ім'я каталогу вводиться з клавіатури.

  3. Переглянути вміст поточного каталогу, ввести з клавіатури ім'я одного з файлів. Якщо цей файл має ненульову довжину, то вивести його вміст на екран. Якщо вказаний в параметрі командного рядка файл не має встановленого атрибуту дозволу для виконання, то необхідно встановити цей параметр.

  4. Перевірити, чи є зазначений у параметрі файл каталогом. Вивести відповідну інформацію на екран. Якщо це каталог, то встановити дозвіл запису в цей каталог.

  5. Вивести для певного каталогу імена текстових файлів, для яких дозволена запис. Ім'я каталогу задається через параметр командного рядка.

  6. Вивести для каталогу (ім'я каталогу вводиться з клавіатури) список файлів, для яких дозволені виконання і читання.

  7. Створити резервні копії текстових файлів, що мають атрибут дозволу для запису.

  8. Читати вміст зазначеного каталогу в файл. Якщо каталог не порожній, видати на екран повідомлення. Ім'я каталогу передається через параметр командного рядка.

  9. Роздрукувати з поточного каталогу містять цифри імена всіх файлів з розширеннями "*. c" і "*.cpp".

  10. Створити в каталозі "./Links" символічні посилання на всі файли поточного каталогу з додаванням до імені файлу ".Link".

  11. Копіювати в каталог, ім'я якого вводиться з клавіатури, файли, у яких ім'я починається з літер "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

У нормальному інтерактивному режимі роботи стандартний потік введення зв'язує процес з клавіатурою, а стандартні потоки виводу і виведення помилок – з поточним терміналом.

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