- •Тема 11. Модульное программирование: файлы и потоки
- •Описание и внутреннее представление файлов
- •Текстовые и бинарные файлы
- •Базовые операции над файлами
- •Позиционирование в файле
- •Библиотечные функции работы с файлами
- •Понятие потока
- •Назначение классов потокового ввода-вывода
- •Функция pthread_exit
- •Функция pthread_join
- •Список использованной литературы:
- •Список контрольных вопросов
Назначение классов потокового ввода-вывода
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>).
