Міністерство освіти і науки, молоді та спорту України
Національний університет „Львівська політехніка”
Кафедра ЕОМ
Звіт
з лабораторної роботи № 7
з дисципліни: “Основи логарифмізації та програмування”
на тему: “ Розв'язування на С задач, які використовують файли для вводу та виводу даних”
Львів – 2013
Мета роботи
познайомитися iз засобами файлового вводу та виводу в мовi програмування С.
Теоретичні відомості
Файловий ввід та вивід:
З точки зору програми на мові С всі типи файлів при виконанні операцій вводу та виводу розглядаються як потік логічних даних незалежно від того чи програма читає (записує) символ чи байт, чи рядок даних, чи блок даних заданого розміру. Потоки в С можуть бути або текстовими потоками або бінарними потоками. При відкриванні файла з допомогод функції fopen( ) створює новий потік, який існує до тих пір доки не буде закритий з допомогою функції fclose( ). В мові С виконання операцій вводу-виводу делегується виконавчому середовищу (операційній системі) у якому виконується програма. Таким чином потік є каналом через який дані можуть передаватися з виконавчого середовища в програму чи з програми у виконавче середовище. Операції вводу-виводу з пристроями виконуються таким самим чином як і з файлами.
Текстовий потік транспортує символи тексту, які складаються з рядків (розділені на рядки). Рядки тексту складаються з послідовності символів, які завершуються символом нового рядка (керуючим символом). Рядок може бути і порожнім.
Бінарний потік є послідовністю байтів, які жодим чином не інтерпретуються і передаються без модифікації. У бінарному потоці не виділяють жодних керуючих керуючих символів. Дані записані в бінарний потік можуть бути знову прочитані у такими ж як були записані.
Файли в С представляються послідовністю байтів. Функція fopen( ) зв'язує файл з потоком і ініціалізує об'єкт типу FILE, який містить всю необхідну інформацію для управління потоком. Ця інформація включає вказівник на використовуваний буфер, індикатор поточної позиції у файлі тоа інші.
Функція fopen( ) повертає вказівник на об'єкт FILE потоку, який пов'язаний з відкритим файлом. Після відкриття файла з ним можна виконувати функції, які виконують читання-запис даних. Ці функції мають вказівник на об'єкт FILE як один із аргументів.
Прототип стандартної бібліотечної функції fopen( ) наступний
FILE *fopen( const char * filename, const char * mode );
Функція відкриває файл з іменем, який задається рядком filename. Параметр filename може містити і частину, яка специфікує каталог. Другий аргумент, mode, також є рядком і задає режим доступу. Цей аргумент вказує, які операції допустимі з файлом. Найважливішими є наступні значення цього аргументу:
"rb" - читання з бінарного потоку
"wb" - запис в бінарний потік
"rt" - читання з текстового потоку
"wt" - запис в текстовий потік
Для закривання фала використовується функція fclose( ). Її прототип:
int fclose( FILE *fp );
Функція скидує дані, якщо вони ще залишилися в буфері в файл, закриває файл і звільняє пам'ять, яку займали буфери вводу-виводу. Функція fclose( ) повертає нуль при успішному завершенні чи EOF, якщо станеться помилка.
Для читання символів використовується функція
int fgetc( FILE * fp );
Функція fgetc( ) читає символ з вхідного потоку на який посилається fp. Вона повертає прочитаний символ чи EOF, якщо станеться помилка.
Запис окремого символу в потік здійснюється з допомогою функції
int fputc( int c, FILE *fp );
Функція fputc( ) записує символ, який задається аргументом c у вихідний потік на який посилається fp. Вона повертає записаний символ чи EOF, якщо станеться помилка.
Читання рядка з потоку виконується функцією
char *fgets( char *buf, int n, FILE *fp );
Функція fgets( ) читає до n - 1 символів з вхідного потоку, на який посилається fp в буфер, яки...