Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТЕМА 11.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
42 Кб
Скачать
☆

Назначение классов потокового ввода-вывода

ios

Потоковый базовый класс

Потоковые классы ввода

istream

Потоковый класс общего назначения для ввода, являющийся базовым классом для других потоков ввода

ifstream

Потоковый класс для ввода из файла

istream with assign

Потоковый класс ввода для cin

istrstream

Потоковый класс для ввода строк

Потоковые классы вывода

ostream

Потоковый класс общего назначения для вывода, являющийся базовым классом для других потоков вывода

ofstream

Потоковый класс для вывода в файл

ostream_withassign

Потоковый класс ввода для cout, cerr, and clog

ostrstream

Потоковый класс для вывода строк

Потоковые классы ввода-вывода

iostream

Потоковый класс общего назначения для ввода-вывода, являющийся базовым классом для других потоков ввода-вывода

fstream

Потоковый класс для ввода-вывода в файл

sir stream

Потоковый класс для ввода-вывода строк

stdiostream

Класс для ввода-вывода в стандартные файлы ввода-вывода

Классы буферов для потоков

Streambuf

Абстрактный базовый класс буфера потока

filebuf

Класс буфера потока для дисковых файлов

s trs treambuf

Класс буфера потока для строк

stdiobuf

Класс буфера потока для стандартных файлов ввода-вывода

Назначение почти всех классов следует из их названия. Классы группы _withassign являются производными соответствующих потоковых классов без этого окончания. Они перегружают операцию присваивания, что позволяет изменять указатель на используемый классом буфер.

Потоки ввода-вывода C++ предоставляют некоторые преимущества по сравнению с функциями ввода-вывода библиотеки С.

Функции работы с потоками

В этом разделе мы опишем пять основных функций для работы с потоками.

Функция pthread_create

При запуске пpoгрaммы вызовом exec создается единственный поток, называемый начальным потоком, или главным (initial thread). Добавочные потоки создаются вызовом pthread_create:

#include <pthread.h>

int pthread_create(pthread_t *tid, const pthread_attr_t *attr, void *(*func) (void *), void *arg);

/* Возвращает 0 в случае успешного завершения, положительное значение Еххх – в случае ошибки */

Каждый поток процесса обладает собственным идентификатором потока, который имеет тип pthread_t. При успешном создании нового потока его идентификатор возвращается через указатель tid.

Каждый поток обладает некоторым количеством атрибутов: приоритетом, начальным размером стека, признаком демона и т. п. При создании потока эти атрибуты могут быть указаны с помощью переменной типа pthread_attr_t, значение которой имеет более высокий приоритет, чем значения по умолчанию. Обычно мы используем значения по умолчанию. При этом аргумент attr является нулевым указателем.

Наконец, при создании потока должны быть указать функцию, которую он будет выполнять, — начальную функцию потока (thread start function). Поток запускается вызовом этой функции и завершается либо явно (вызовом pthread_exit), либо неявно (возвратом из этой функции). Адрес функции указывается в аргументе func, и вызывается она с единственным аргументом — указателем arg. Если функции нужно передать несколько аргументов, следует упаковать их в структуру и передать ее адрес в качестве единственного аргумента начальной функции.

Функции Posix для работы с потоками обычно возвращают 0 в случае успешного завершения работы и ненулевое значение в случае ошибки. В отличие от большинства системных функций, возвращающих –1 в случае ошибки и устанавливающих значение errno равным коду ошибки, функции Pthread возвращают положительный код ошибки. Например, если pthread_create не сможет создать новый поток из-за превышения системного oгрaничeния на потоки, эта функция вернет значение EAGAIN. Функции Pthread не устанавливают значение переменной errno. Несоответствий при их вызове не возникает, поскольку ни один из кодов ошибок не имеет нулевого значения (<sys/errno.h>).