summaryrefslogtreecommitdiff
path: root/man/ru/mpu_ferror.3
blob: 5884b8eba44160a6be812ce7c4a9cf3d5ca23a03 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
.TH MPU_SETVBUF 3 "Август 2026" "libmpuio" "Руководство программиста LIBMPUIO"
.SH ИМЯ
mpu_setvbuf, mpu_setbuf, mpu_setlinebuf, mpu_feof, mpu_ferror, mpu_clearerr \- буферизация и состояние потока
.SH ОБЗОР
.nf
#include <libmpuio.h>

int       mpu_setvbuf( mpu_FILE *stream, unsigned char *buf,
                       int mode, size_t size );
void      mpu_setbuf( mpu_FILE *stream, unsigned char *buf );
void      mpu_setlinebuf( mpu_FILE *stream );
int       mpu_feof( mpu_FILE *stream );
int       mpu_ferror( mpu_FILE *stream );
void      mpu_clearerr( mpu_FILE *stream );
.fi
.SH ОПИСАНИЕ
.B mpu_setvbuf
выбирает полную буферизацию (MPU_IOFBF), построчную буферизацию (MPU_IOLBF)
или отсутствие буферизации (MPU_IONBF).  Буфер, предоставленный вызывающей
стороной, используется непосредственно до закрытия или перенастройки потока.
.PP
.B mpu_setbuf
выбирает полную буферизацию с размером MPU_BUFSIZ, если buf не равен NULL,
и небуферизованный режим, если buf равен NULL.
.PP
.BR mpu_feof ,
.BR mpu_ferror
и
.B mpu_clearerr
проверяют или очищают индикаторы состояния потока.
.SH ИНДИКАТОРЫ СОСТОЯНИЯ И ОШИБОК
.BR mpu_feof ()
сообщает состояние индикатора EOF; функция не предсказывает, встретит ли
следующая операция чтения конец файла.  Индикатор устанавливается только
после того, как операция ввода фактически обнаружит конец файла.
.BR mpu_ferror ()
сообщает состояние индикатора ошибки потока.
.BR mpu_clearerr ()
очищает оба индикатора.
.PP
EAGAIN/EWOULDBLOCK для неблокирующего дескриптора устанавливает индикатор
ошибки, а не EOF.  После изменения условия можно вызвать clearerr и повторить
операцию ввода.
.SH БЛОКИРУЕМЫЕ И НЕБЛОКИРУЕМЫЕ ОПЕРАЦИИ СОСТОЯНИЯ
mpu_feof_unlocked, mpu_ferror_unlocked и mpu_clearerr_unlocked имеют ту же
семантику индикаторов, но не захватывают mutex потока.  Используйте их только
при эксклюзивном доступе к потоку либо при удержании mpu_flockfile().
.PP
Функции настройки буферизации не имеют вариантов unlocked.  Буферизацию
следует настраивать как операцию изменения состояния потока, а не выполнять
одновременно с активным вводом-выводом.
.SH ТРАНЗАКЦИОННАЯ ПЕРЕНАСТРОЙКА
Для потоков на основе дескрипторов и cookie новое хранилище подготавливается
до синхронизации или освобождения текущего буфера.  Если выделение внутреннего
буфера завершается неудачей, mpu_setvbuf() возвращает ошибку, оставляя прежний
буфер, активное направление и ожидающие буферизованные данные пригодными для
дальнейшего использования.  Более поздняя ошибка синхронизации всё же может
изменить состояние backend в ходе предпринятой синхронизации.

.SH СМ. ТАКЖЕ
.BR mpu_fopen (3),
.BR mpu_fflush (3),
.BR mpu_flushlbf (3),
.BR libmpuio (3)

.SH SETLINEBUF
.BR mpu_setlinebuf ()
\- вспомогательный интерфейс в стиле glibc, эквивалентный выбору
.B MPU_IOLBF
с внутренне выделяемым буфером размером
.B MPU_BUFSIZ
символов/байтов, соответствующим backend с байтовым буфером.  Как и setbuf(3),
эта функция не возвращает значение; если вызывающей стороне требуется явное
сообщение об ошибке, используйте mpu_setvbuf().

.SH СБРОС ПОСТРОЧНО БУФЕРИЗОВАННЫХ ПОТОКОВ
.BR mpu_flushlbf (3)
сбрасывает все потоки, которые в данный момент выполняют запись и настроены
с MPU_IOLBF, не затрагивая полностью буферизованные потоки.