Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторна робота № 2.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
28.98 Кб
Скачать

Введення і виведення записів

Читання записів з потоку виконується функцією

size_t fread(

void *ptr, // покажчик на буфер у пам'яті, що приймає записи

size_t size, // розмір запису в байтах

size_t n, // кількість читаних записів

FILE *stream )

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

Загальна кількість читаних байтів дорівнює n *size.

Виведення записів у потік виконується функцією

size_t fwrite(

constvoid *ptr,

size_t size

size_t n

FILE* stream )

Вона додає вказану кількість записів у файл.

Сенс параметрів і значення, що повертається, той же, що у функції fread.

Управління покажчиком файла

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

intfseek(FILE *stream,

longoffset, // зсув покажчика

intwhence ) // відлік зсуву

Вона повертає 0 при успіху.

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

Для вказівки точки відліку зсуву використовують константи:

SEEK_SET = 0 – відлік від початку файла;

SEEK_CUR = 1 – відлік від кінця файла;

SEEK_END = 2 – відлік від поточної позиції покажчика.

Функція

longftell(FILE *stream ) – повертає поточну позицію покажчика.

При помилці повертає 1 і встановлює глобальну змінну errno в ненульове значення.

Зауваження. Ті ж дії виконуються функціями fsetpos і fgetpos.

Стан потоку

Макрос, який перевіряє досягнення кінця файла потоку:

intfeof (FILE *stream) – повертає не 0, якщо досягнутий кінець файла, і 0 – навпаки.

Макрос, що тестує індикатор помилки потоку:

intferror(FILE *stream) – повертає не 0, якщо виявлена помилка запису або читання.

Одного разу встановлений індикатор помилки зберігається до виконання функцій clearerr, rewind або закриття потоку. Індикатор "кінець файла" встановлюється заново кожною операцією читання.

voidclearerr(FILE *stream) – обнуляє індикатори помилки і кінця файла.

voidrewind(FILE *stream) – робить те ж, що clearerr, а також встановлює покажчик у початок файла.

При виникненні помилки глобальна змінна errno (визначена у файлах errno.h, stddef.h, stdlib.h) одержує ненульовий номер помилки.

Форматоване виведення

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

intfprintf (FILE *stream,

constchar *format // рядок формату

[, argument, ...] ) // значення, що виводяться

При успіху повертає кількість виведених байт, при невдачі – EOF. Квадратні дужки говорять про необов'язковість аргументу.

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

Загальний вигляд специфікації формату наступний:

%[прапори] [ширина] [.точність] [розмір] тип;

прапори – ознаки вирівнювання, використання знаків, десяткової крапки, кінцевих нулів, 8-річних і 16-річних префіксів;

ширина – мінімальне число друкованих символів з урахуванням пропусків і нулів;

точність – максимальне число друкованих символів (для цілих – мінімальне число цифр);

розмір – визначає розмір аргументу;

тип –- символ специфікації типу – обов'язковий елемент формату.