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

Відкриття і закриття потоку

Схема роботи з потоком така ж, як і з файлом: відкрити потік, виконати читання і/або запис, закрити потік.

Відкриває потік функція

FILE* fopen(

constchar *filename,// ім'я файла, що асоціюється з потоком

constchar *mode // рядок режимів роботи з потоком

) – повертає покажчик на потік, який ідентифікує його в подальших операціях.

У рядку режимів можуть знаходитися наступні символи:

r – відкрити тільки для читання;

w – створити для запису. Існуючий файл буде перекритий новим;

а – відкрити для дозапису, або створити для запису, якщо файл не існує;

+ – операції виконуватимуться з уже існуючим файлом;

t – текстовий режим (обробка символів CR-LF);

b – двійковий режим (ніякої обробки).

За відсутності в рядку b або t режим визначається глобальній змінній _fmode, визначеній у заголовному файлі fcntl.h.

FILE – це структура для потоку, що управляє, оголошена в stdio.h. Вона не призначена для прямого використання.

Потік є програмною надбудовою над файлом, що надає програмісту додатковий сервіс. Крім сумісного відкриття потоку і файла (fopen), можна відкрити потік і асоціювати його з уже відкритим файлом (fdopen), відкрити файл і асоціювати його з уже відкритим потоком (freopen).

Закриває потік і вивантажує буфери функція

intfclose(FILE *stream ) – повертає 0 при успіху і EOF – при помилці.

EOF – константа, визначена в stdio.h.

intfcloseall(void) – закриває всі відкриті потоки, окрім стандартних: stdin, stdout, stdprn, stderr і stdaux.

Введення і виведення символів

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

intfgetc(FILE *stream) – повертає код символу. При помилці повертає EOF. Запис символу в потік виконується функцією

intfputc(intз, FILE *stream) – повертає код символу з. При помилці повертає EOF.

Читання символу зі стандартного потоку stdin виконується функцією intfgetchar(void);.

Запис символу в стандартний потік stdout виконується функцією intfputchar(int з);.

Завдання. Скопіювати файл xxx.bin у файл yyy.bin.

Рішення.

#include<stdio.h>

voidmain() { FILE *in = fopen ("noname00.cpp","rt");

FILE *out = fopen ("noname00.000","wt");

if (!in) return;

while (!feof(in))

fputc(fgetc(in), out);

fcloseall(); }

Введення і виведення рядків

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

char *fgets(

char *s, // покажчик на буфер, що приймає рядок

int n, // гранична кількість читаних символів (звичайно розмір буфера)

FILE *stream )

Вона повертає покажчик на буфер або NULL при помилці.

Читання припиняється, коли досягнутий кінець рядка або прочитано n-1 символів з файла. Рядок у буфері замикається нульовим символом. Покажчик файла переміщається за символи CR-LF.

Запис рядка в потік виконується функцією

char*fputs(

char*s, // покажчик на рядок

FILE *stream )

Вона повертає покажчик на останній записаний символ або EOF при помилці.

Термінальний символ рядка не копіюється. Символи CR-LF додаються у файл.

Завдання. Скопіювати текстовий файл xxx.txt у файл yyy.txt за рядками.

Рішення.

#include<stdio.h>

voidmain() { constint n = 100;

charbuf [n];

FILE *in = fopen (noname00. cpp,r);

FILE *out = fopen (noname00. 000,w);

if (!in) return;

while (!feof(in)) { fgets(buf, n, in);

fputs(buf, out);

}

fcloseall(); }