русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


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


Дата додавання: 2014-11-28; переглядів: 822.


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

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

Послідовний доступ.Операції читання і запису виконуються в текучому положенні вказівника. Після відкриття файлу для читання перших десяти байт вказівник встановлюється на 10 позиції, звідки і починається наступна позиція вводу. Тому при послідовному вводі чи виводі даних з файлу нема необхідності звертати увагу на вказівник позиції функції вводу виводу самі про це вирішать.

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

Функції ftell(). Визначає положення вказівника у файлі. Прототип знаходиться у файлі stdio.h.

long ftell(FILE *fp) ;

Аргументfp -є вказівником на структуру FILE ,який повертається з функції fopen() при відкритті файлу. Функція повертає значення типу long, яке вказує номер текучого байта у файлі від його початку (початковий номер байта у файлі = 0). У випадку помилки функція повертає -1L (cont -1 типу long).

Функції rewind Встановлює положення вказівника на початок файлу Прототип знаходиться у файлі stdio.hі має вид:

void rewind(FILE *fp) ;

Аргументfp -є вказівником на структуру FILE ,який повертається з функції fopen() при відкритті файлу. Використовується тоді, коли з файлу були вже зчитані дані і знову треба вернутися на початок.

Приклад програми використання функційrewind(). і .ftell()..

#include <stdlib.h>

#include <stdio.h>

char msg[]="abcdefghijklmnopqrstuvwxyz";/*присвоєння масиву msg значень*/

main(){FILE *fp; /*Опис вказівника на структуру */

char buf[6]; /*Опис масиву розмірності 6 */

fp = fopen("C:\\ff.TXT", "w")); /*Відкриття файлу для запису*/

if ( (fp = =NULL) { printf( "Помилка відкриття"); exit(1); }

fputs(msg, fp); /*Запис масиву у файл*/

if (fputs(msg, fp) == EOF) { printf("Помилка запису."); exit(1); }

fclose(fp); /*Закриття файлу для запису*/

fp = fopen("C:\\ff.TXT ", "r"); /*Відкриття файлу для читання. */

if ( (fp == NULL) { fprintf (".Помилка відкриття "); exit(1); }

printf("\n=положення файлового вказівника%ld", ftell(fp));

/*Результат Друк ftell(fp)=0 */

fgets(buf, 6, fp);/* Зчитування з файлу fp 5 символів. */

printf("\nAДрук 5-ти символів%s, положення вказівника = %ld", buf, ftell(fp));

rewind(fp); /*Повернення на початок потоку. */

printf("\n\n Друк позиції %ld", ftell(fp));

fclose(fp); }

Функції fseek().Ця функція додаткові можливості керування положенням вказівника у файлі. З її допомогою можна встановити вказівник в будь-яку позицію у файлі. Прототип знаходиться у файлі stdio.h. і має вигляд

int fseek(FILE *fp, long a1, int а2);

Аргумент fp - є вказівником на структуру FILE, який повертається з функції fopen() при відкритті файлу. Відстань, на яку треба сумістити вказівник позиції задається аргументом a1, вираженого в байтах. Аргумент а2 задає точку, від якої обчислюється зміщення. Цей аргумент може мати одне з трьох значень — символічні константи, перераховані в таблиці

Таблиця. Допустимі значення аргументів а2функції fseek()

Константа Значення Опис
SEEK_SET Встановлює вказівник на байт з порядковим номером a1, починаючи з початку файлу
SEEK_CUR Зміщує вказівник на a1байт від його текучого значення
SEEK_END Встановлює вказівник на відстань a1 байт, починаючи з кінця файлу

 

Функція повертає 0, коли зміщення було виконано без помилок і ненульове значення у випадку помилки.

 

2 Завдання практичної роботи:

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

 


<== попередня лекція | наступна лекція ==>
Короткі теоретичні відомості | Варіанти індивідуальних завдань


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн