Перейти до головного вмісту

Лекція 14. Функції обміну з потоками

Сайт: Навчально-інформаційний портал НУБіП України
Курс: Основи програмування
Книга: Лекція 14. Функції обміну з потоками
Надруковано: Гість-користувач
Дата: неділя, 15 лютого 2026, 19:42

1. Різновиди потоків

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

        У загальному випадку у файлах може зберігатися символьна інформація (форматовані файли) і двійкова (неформатовані файли). Тому існують потоки текстові, які складаються із символів, розділених на рядки. Для розподілу на рядки використовується керуючий символ '\n'. Текстові потоки добре переносяться на інші комп'ютери, якщо в них не втримуються спеціальні символи псевдографіки фірми IBM.

        Двійкові потоки - це послідовність значень типу char. Будь-які дані можна вважати послідовністю символів. Для визначення типу потоку при відкритті файлів додатково вказується буква для текстових і для двійкових потоків.
        Обмін символами.
        Обмін рядками.
        Форматний обмін.
        Довільний доступ до потоку.

2. Операції обміну

Обмін рядками

fgets (string, MAXLIN, point) - читання рядка з файлу з покажчиком point string - ім'я рядка, куди зчитуються символи рядка;     MAXLIN - максимальна кількість символів, яку потрібно прочитати. третій параметр - це покажчик point на файл, звідки здійснюється зчитування, Функція fgets припиняє роботу, якщо прочитане MAXLIN-1 символів, або до зчитування символу закінчення рядка ('\n'). Повертає NULL, якщо натрапили на кінець файлу. Status=fputs(string, point) запис рядка у файл. Якщо відбулася помилка або кінець файлу, то вертається EOF.


3. Форматний обмін

 fscanf (point, “%d”, &psi) – зчитування з файлу. Функція передає кількість правильно прочитаних значень, а також EOF, коли файл вичерпано

fprint (point, “psi=%d \n”, psiзапис в файл

 У файл point записується ціле значення psi. Функція передає кількість правильно записаних значень.

Для обміну цілими передбачено дві функції getw(point)putw(int, point).

Функція getw зчитує два байти з потоку point і передає змінний с. Функція putw записує ціле значення змінної з у потік point. Але для різних систем може виникнути питання перенесення.

4. Функції для обміну блоками байтів

Передбачено дві функції для обміну блоками байтів:

1. fread (buffer, size, count, stream);

З потоку stream зчитується count блоків, кожний з яких має розмір size, у буфер buffer. Функція передає дійсну кількість лічених блоків і ніяких форматних перетворень НЕ відбувається.

2. fwrite(buffer, size, count, stream);

З буфера buffer записується count блоків, кожний з яких розміром size у потік stream. Функція передає кількість у дійсності записаних блоків. Відзначимо ще дві функції форматного обміну. Функція sscanf відрізняється від функції fscanf тим, що зчитування здійснюється з рядка string.

5. Довільний доступ до потоку

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

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

Але існує можливість позиціонувати покажчик на будь-яку позицію в потоці, тобто реалізувати прямий доступ до файлу. Існує п'ять функцій для позиціонування покажчика потоку:
1. ftell(point) - передає поточну позицію покажчика потоку.
2. fgetpos(point, long) – передає поточну позицію покажчика потоку, передає 0, якщо визначення відбулося правильно й -1 інакше.
3. fsetpos(point, long) – установлює відповідну позицію покажчика потоку.

4. fseek(fp, count, start);, установлення покажчика на будь-яку позицію покажчика потоку, де fp - покажчик на файл; count - кількість байт типу long, визначає абсолютну або відносну позицію у файлі; start - типу int, з якої позиції потрібно відраховувати кількість байт count.

5. rewind (fp) перейти на початок файлу, аналогічна fseek (fp, 0L, SEEK_SET).
Якщо потік відкрито для додавання (режим "а""а+"), тоді запис завжди здійснюється в кінець файлу. Тобто хоч відповідними функціями можна знайти потрібну позицію, але при спробі запису покажчик попередньо буде встановлений на кінець файлу. Відзначені функції організації прямого доступу не можна застосовувати до стандартних файлів в текстовому форматі.

Доступність

Шрифти Шрифти

Розмір шрифта Розмір шрифта

1

Колір тексту Колір тексту

Колір тла Колір тла

Кернінг шрифтів Кернінг шрифтів

Видимість картинок Видимість картинок

Інтервал між літерами Інтервал між літерами

0

Висота рядка Висота рядка

1.2

Виділити посилання Виділити посилання

Вирівнювання тексту Вирівнювання тексту

Ширина абзацу Ширина абзацу

0