summaryrefslogtreecommitdiff
path: root/man/ru/mpu_fread.3
blob: 0ef5e703226b06f0debbd3afb5cf37d08f411049 (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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
.TH MPU_FREAD 3 "Август 2026" "libmpuio" "Руководство программиста LIBMPUIO"
.SH ИМЯ
mpu_fread, mpu_fwrite \- блочный ввод-вывод сырых байтов в потоках LIBMPUIO
.SH ОБЗОР
.nf
#include <libmpuio.h>

size_t    mpu_fread( void *ptr, size_t size, size_t nmemb,
                     mpu_FILE *stream );
size_t    mpu_fwrite( const void *ptr, size_t size, size_t nmemb,
                      mpu_FILE *stream );
.fi
.SH ОПИСАНИЕ
Эти функции передают сырые байты.  Преобразование UCS-2/UTF-8 не выполняется.
Возвращаемое значение равно числу полностью переданных элементов.
.PP
Если
.I size
или
.I nmemb
равен нулю, немедленно возвращается ноль и операция чтения или записи backend
не выполняется.  В этом случае допускается NULL-указатель данных.
.PP
Произведение
.I size * nmemb
проверяется до передачи.  Если оно не представимо типом
.BR size_t ,
возвращается ноль,
.B errno
устанавливается в
.BR EOVERFLOW ,
а индикатор ошибки потока устанавливается.
.PP
POSIX-операции read и write, прерванные сигналом, повторяются после
.BR EINTR .
Короткие записи учитываются точно.  Если сброс буфера записал префикс, а затем
завершился ошибкой, в потоке ожидает только незаписанный суффикс; поэтому более
поздний успешный flush не дублирует байты, уже переданные дескриптору.  Короткая
передача может привести к тому, что mpu_fread() или mpu_fwrite() возвратит
меньше полных элементов, чем запрошено.
.SH ДВОИЧНЫЙ И ТЕКСТОВЫЙ ВВОД-ВЫВОД
Эти функции передают сырые байты и не выполняют преобразование UTF-8/UCS-2.
Поэтому их можно использовать для двоичных данных, несмотря на то что
текстовые функции того же backend реального файла используют UTF-8.
.SH НЕПОЛНЫЕ ЭЛЕМЕНТЫ
Возвращаемое значение учитывает только полные элементы.  Если ввод заканчивается
или завершается ошибкой после того, как часть байтов следующего элемента уже
передана, эти байты остаются потреблёнными и находятся в буфере вызывающей
стороны, но неполный элемент не включается в возвращаемое число.
.PP
Если size или nmemb равен нулю, операция backend не выполняется и возвращается
ноль.  Переполнение при умножении size*nmemb отвергается с EOVERFLOW.
.SH НЕБЛОКИРУЮЩИЙ И ПРЕРВАННЫЙ ВВОД-ВЫВОД
EINTR от нижележащей операции read/write приводит к повтору.  EAGAIN или
EWOULDBLOCK является ошибочным состоянием, а не EOF.  Вызывающая сторона может
использовать
.BR mpu_clearerr (3)
и повторить операцию, когда дескриптор станет готов.
.PP
Для вывода частично успешная запись с последующей ошибкой продвигает ожидающий
буфер так, чтобы следующий flush повторял только незаписанный суффикс и не
дублировал уже переданные байты.
.SH БЛОКИРУЕМЫЕ И НЕБЛОКИРУЕМЫЕ ФОРМЫ
.BR mpu_fread_unlocked ()
и
.BR mpu_fwrite_unlocked ()
имеют ту же семантику подсчёта элементов, частичной передачи, переполнения,
EINTR, EAGAIN, индикаторов и backend, что и обычные функции, но не захватывают
mutex потока.

.SH СМ. ТАКЖЕ
.BR mpu_fgetc (3),
.BR mpu_printf (3),
.BR libmpuio (3)
.SH НЕБЛОКИРУЮЩИЙ ВВОД
Для неблокирующего дескриптора, если в данный момент входные данные недоступны,
.B mpu_fread()
возвращает число уже полученных полных элементов, возможно ноль, устанавливает
индикатор ошибки потока и оставляет
.B errno
равным
.B EAGAIN
или
.BR EWOULDBLOCK .
Это состояние не является концом файла, поэтому индикатор EOF не устанавливается.
После
.BR mpu_clearerr (3)
последующий вызов может продолжить чтение, когда появятся новые данные.
.PP
Если нижележащий ввод заканчивается или временно становится недоступным после
чтения только части последнего запрошенного элемента, эти байты всё равно уже
потреблены из потока и скопированы в буфер вызывающей стороны.  Однако
возвращаемое значение по-прежнему считает только полные элементы, как и
требуется для блочного I/O в стиле fread.