У нас: 141825 рефератів
Щойно додані Реферати Тор 100
Скористайтеся пошуком, наприклад Реферат        Грубий пошук Точний пошук
Вхід в абонемент



Лабораторна робота - Прямий доступ.
5

Лабораторна робота

Тема:

 

Файли.

Прямий доступ.

Мета роботи: вивчення засобiв мови Сi для обробки файлiв за допомогою прямого доступу.

Завдання 1: Сформувати файл, що містить інформацію про книги за таким зразком: прізвище автора, назва, рік видання. Використовуючи сформований файл, знайти назви книг даного автора, рік видання. Прізвище автора ввести з клавіатури.

Короткі теоретичні відомості:

Файлом називається іменована область зовнiшньої (магнiтної) пам’яті, куди можна записати якусь iнформацiю. Кожний файл має своє ім’я, яке складається з двох частин: назви і розширення, розділених крапкою. Назва представляє собою ідентифікатор, сучасні операційні системи дозволяють мати назву довжиною до 64 та більше будь-яких (за невеликим винятком) символів. Давніші, такі, наприклад, як MS DOS, – лише до 8 літер або цифр та символа підкреслення, причому першим символом повинна бути буква. Досвід роботи з файлами підказує, що не варто зловживати можливостями сучасних операційних систем. По-перше, для абсолютної більшості задач назва довжиною 8 літер є достатньою, по-друге, виникають ті ж труднощі, що й з вищеописаною ідентифікацією змінних – зростає ймовірність помилки в назві, громіздкість тексту програми та ін., по-третє, що є найголовнішим, звужується область використання програми.

Розширення може мати довжину до 3 символів, а в деяких сучасних операційних системах – більше. Воно не обов’язкове, але часом буває вигідним, наприклад, якщо групу файлів треба однаково назвати, то розрізнити їх дозволить розширення.

З метою забезпечення одночасного звернення до декількох файлів використовуються символи групових назв: * – для цілого слова та ? –для однієї букви, наприклад, назва *.mmm означає всі файли з розширенням mmm.

За виглядом розширення файли діляться на два типи: стандартні і користувача. В якості прикладу можна назвати такі стандартні розширення: *.doc – документ MS Word, *.c – початковий модуль мовою Сі для операційних систем MS DOS та Unix, *.cpp – початковий модуль мовою С++, *.h – файл заголовків функцій, *.exe – скомпільована програма в MS DOS, *.out – скомпільована програма в Unix та ін.

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

Один магнітний диск або інший фізичний носій зовнішньої пам’яті може містити сотні, тисячі і т.д. різних файлів. З метою якогось їх упорядкування, наприклад, за тематикою та скорочення часу на пошуки файли об’єднують у каталоги та підкаталоги, які інакше називаються директоріями або папками. Каталог, відкритий у даний момент часу, називається поточним. При зверненні до файлу, який знаходиться в поточному каталозі, достатньо вказати лише його ім’я. Якщо файл знаходиться в іншому каталозі, то можна задати повне ім’я – разом із назвою диска та іменами каталогів і підкаталогів, розділених символом \ – зворотній слеш. Наприклад: d:\program\c\robota.c.

Зрозуміло, що під час запису інформації в файл та при зчитуванні з нього відбувається обмiн даними мiж оперативною та зовнішньою пам’яттю. Програміст може записувати чи зчитувати різні за довжиною порції даних як йому вигідно. Звичайно, що це може впливати на швидкість виконання програми, чим коротші будуть порції, тим частіше мали б виконуватися операції вводу-виводу і тим довше виконуватиметься програма. А ще треба врахувати, що зовнішня пам’ять є порівняно повільнодіючою.

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

Через це розрізняють два представлення одного й того ж файлу: логічний файл – на рівні роботи з буфером і фізичний – на магнітному диску. Таким чином, звичайна прикладна програма (не операційна система), в тому числі мовою Сі, працює з логічним файлом. З метою підвищення ефективності роботи програми варто узгоджувати довжину одноразової порції вводу-виводу з довжиною буфера, бажано, що вони були кратними.

Мова Сі не має спеціальних операторів для роботи з файлами, цю роботу виконують функції. Всі вони описані в уже відомому нам заголовковому файлі stdio.h. Різні компілятори можуть мати різну кількість функцій вводу-виводу. Загалом їх є декілька десятків, але ми розглянемо лише найголовніші.

При використаннi файлу його обов’язково необхідно оголосити, це робиться так:

FILE *f1,*f2, ... ,*fn;

Тут *f1,...,*fn – вказівники на файли, одночасно можна оголосити n вказівників. Кожному файлу вiдповiдає свiй вказівник, ця вiдповiднiсть встановлюється в момент вiдкриття файлiв. Він являє собою адресу пам’яті, де знаходяться відомості про буфер: адреса буфера, ступінь його заповнення та ім’я фізичного файлу, для якого він призначений.

Нижче переліченi основнi функцiї для роботи з файлами.

f1=fopen("iф",


Сторінки: 1 2