
Лабораторна робота № 6
Лабораторна робота № 6. Організація роботи з файлами
Мета роботи. Навчитися працювати з файлами. У запропонованих задачах потрібно створити необхідні файли заздалегідь засобами системи, якщо в програмі відбувається звернення до них.
Хід роботи :
1.Скласти алгоритм програми за індивідуальним варіантом, номер якого визначає викладач.
Скласти програму вiдповiдно до розробленого алгоритму. В програмі обов‘язково використати розумне число коментарів.
Скласти програму мовою Сі та отримати вірний результат. Протестувати результат на декількох прикладах.
Написати звіт, в якому навести умову задачі, текст програми з коментарями, блок-схему алгоритму та Print Screen результату. Захистити звіт.
ВМIСТ ЗВIТУ
Умова задачі з вказанням номеру варіанта.
Навести текст розробленої програми з коментарями.
Навести результати тестування на комп‘ютері.
Відповісти на контрольні запитання.
При написанні програм імена вхідного і вихідного файлів рекомендується задавати як аргументи командного рядка. Необхідно видавати діагностику при помилкових ситуаціях у роботі з файлами.
Теоретичні відомості.
Мова С крім стандартного введення даних із клавіатури і виведення результатів на екран надає також можливість обміну при операціях уведення / виведення з зовнішніми пристроями, у тому числі, з файлами на диску.
У С не передбачені ніякі визначені структури файлів (такі як файли послідовного чи прямого доступу): усі файли розглядаються як послідовності, потоки байтів. Для файлу визначений маркер (покажчик читання/запису). Він визначає поточну позицію, до якої здійснюється доступ.
З початком роботи будь-якої програми автоматично відкриваються деякі стандартні потоки, наприклад, стандартне введення (його ім'я – stdin ) і стандартне виведення (його ім'я - stdout). За замовчуванням вони зв'язані з клавіатурою й екраном термінала відповідно. Тому в тих функціях уведення / виведення, що використовувалися дотепер, не вказувалося з якого потоку беруться і куди розміщуються дані: це відомо за замовчуванням.
Однак можливо у своїй програмі відкривати інші потоки, зв'язувати їх або з файлами на диску, або з фізичними пристроями (наприклад, принтером), чи записувати зчитувати з них інформацію. Для цього служать функції введення / виведення верхнього рівня.
Доступ до потоку здійснюється за допомогою покажчика. Покажчик на файл описується в такий спосіб:
FILE *fp;
Тип FILE – це структура, визначена в <stdio.h> за допомогою засобу typedef, яка містить деяку інформацію про файл: наприклад, прапорці стану файлу, розмір буфера, покажчик на буфер і ін. Описаний покажчик можна зв'язати з конкретним файлом у момент відкриття даного файлу. Це здійснюється за допомогою функції
fopen ("шлях до файлу", "тип доступу"),
яка повертає покажчик на файл чи NULL у випадку помилки.
Наприклад, у результаті виконання оператора
fp = fopen ( “ ex1.txt “, “w” ) ;
файл ex1.txt відкритий для запису, а в програмі на цей файл можна посилатися за допомогою покажчика fp (тобто функція fopen( ) бере зовнішнє подання файлу – його фізичне ім'я – і ставить йому у відповідність внутрішнє логічне ім'я, що далі і буде використовуватися в програмі). Як тип доступу можуть бути зазначені такі параметри
“ w ” – існуючий файл відкривається для запису, при цьому його старий уміст затирається. Маркер файлу вказує на його початок. Якщо файл ще не існував, то він створюється (якщо це можливо);
“ r “ – існуючий файл відкривається для читання (з початку). Якщо файл не існує – це помилка;
“ a “ – файл відкривається для дозапису в його кінець. Про інші типи доступу можна прочитати в книгах по мові С.
По закінченні роботи з файлом він повинний бути закритий. Для цього використовується функція
fclose (покажчик_файлу).
Для читання / запису даних у файл маються функції, аналогічні уже відомим функціям уведення / виведення
fprintf(), fscanf(), fputs(), fgets(), getc(), putc(), fgetc(), fputc().
Функції getc()/fgetc(), putc()/fputc() за своїми діями ідентичні, відмінність складається тільки в тому, що getc( ) і putc( ) реалізовано як макровизначення, a fgеtc() і fputc( ) – як дійсні функції.
Прототипи усіх файлових функцій, а також необхідні константи знаходяться у файлі <stdio.h> .