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

Операції над файлами і директоріями

Хоча з погляду користувача розгляд операцій над файлами і директоріями представляється достатньо простим і зводиться до переліку ряду системних викликів і команд операційної системи, спроба систематичного підходу до набору операцій викликає певні утруднення. Далі мова піде в основному про регулярні файли і файли типу "директорія".

В лекції (лекція 11, розділ "Організація файлів і доступ до них") йшлося про те, що існує два основні види файлів, що розрізняються по методу доступу: файли послідовного доступу і файли прямого доступу. Якщо розглядати файли прямого і послідовного доступу як абстрактні типи даних, то вони представляються як щось, що містить інформацію, над якою можна скоювати наступні операції:

  • Для послідовного доступу: читання чергової порції даних (read), запис чергової порції даних (write) і позиціонування на початку файлу (rewind).

  • Для прямого доступу: читання чергової порції даних (read), запис чергової порції даних (write) і позиціонування на необхідній частині даних (seek).

Робота з об'єктами цих абстрактних типів має на увазі наявність ще двох необхідних операцій: створення нового об'єкту (new) і знищення існуючого об'єкту (free).

Розширення математичної моделі файлу за рахунок додавання до береженої інформації атрибутів, властивих файлу (права доступу, облікові дані), спричиняє за собою появу ще двох операцій: прочитати атрибути (get attribute) і встановити їх значення (set attribute).

Наділювання файлів якою-небудь внутрішньою структурою (як у файлу типу "директорія") або накладення на набір файлів зовнішньої логічної структури (об'єднання в ациклічний направлений граф) приводить до появи інших наборів операцій, що становлять інтерфейс роботи з файлами, які, проте, будуть комбінаціями перерахованих вище базових операцій.

Для директорії, наприклад, такий набір операцій, визначуваний її внутрішньою будовою, може виглядати так: операції new, free, set attribute і get attribute залишаються без змін, а операції read, write і rewind (seek) замінюються більш високорівневими:

  • прочитати запис, відповідний імені файлу, – get record;

  • додати новий запис – add record;

  • видалити запис, відповідний імені файлу, – delete record.

Неповний набір операцій над файлами, пов'язаний з їх логічним об'єднанням в структуру директорій, виглядатиме таким чином:

  • Операції для роботи з атрибутами файлів – get attribute, set attribute.

  • Операції для роботи з вмістом файлів – read, write, rewind(seek) для регулярних файлів і get record, add record, delete record для директорій.

  • Операція створення регулярного файлу в деякій директорії (створення нового вузла графа і додавання в граф нового іменованого ребра, що веде в цей вузол з деякого вузла, відповідного директорії) – create. Цю операцію можна розглядати як суперпозицію двох операцій: базової операції new для регулярного файлу і add record для відповідної директорії.

  • Операція створення піддиректорії в деякій директорії make directory. Ця операція відрізняється від попередньої операції create занесенням у файл нової директорії інформації про файли з іменами "." і "..", тобто по суті справи вона є суперпозиція операції create і двох операцій add record.

  • Операція створення файлу типу "зв'язок" – symbolic link.

  • Операція створення файлу типа "FIFO" – make FIFO.

  • Операція додавання до графа нового іменованого ребра, що веде від вузла, відповідного директорії, до вузла, відповідному будь-якому іншому типу файлу, – link. Це просто add record з деякими обмеженнями.

  • Операція видалення файлу, що не є директорією або "зв'язком" (видалення іменованого ребра з графа, що веде до термінальної вершини з одночасним видаленням цієї вершини, якщо до неї не ведуть інші іменовані ребра), – unlink.

  • Операція видалення файлу типу "зв'язок" (видалення іменованого ребра, що веде до вузла, відповідному файлу типу "зв'язок", з одночасним видаленням цього вузла і неіменованого ребра, що виходить з нього, якщо до цього вузла не ведуть інші іменовані ребра), – unlink link.

  • Операція рекурсивного видалення директорії зі всіма вхідними в неї файлами і піддиректоріями – remove directory.

  • Операція перейменування файлу (ребра графа) – rename.

  • Операція переміщення файлу з однієї директорії в іншу (переміщається точка виходу іменованого ребра, яке веде до вузла, відповідного даного файлу) – move.

Можливі і інші подібні операції.

Спосіб реалізації файлової системи в реальній операційній системі також може додавати нові операції. Якщо частина інформації файлової системи або окремого файлу кэшується в адресному просторі ядра, то з'являються операції синхронізації даних в кеші і на диску для всієї системи в цілому (sync) і для окремого файлу (sync file).

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