fread
|
Определено в заголовке
<stdio.h>
|
||
| (до C99) | ||
| (начиная с C99) | ||
Считывает до count объектов в массив buffer из заданного входного потока stream , как если бы вызывался fgetc size раз для каждого объекта, и сохраняет результаты, в полученном порядке, в последовательные позиции buffer , который переинтерпретируется как массив unsigned char . Индикатор позиции файла для потока продвигается на количество прочитанных символов.
Если возникает ошибка, результирующее значение индикатора позиции файла для потока становится неопределенным. Если частичный элемент считывается, его значение является неопределенным.
Содержание |
Параметры
| buffer | - | указатель на массив, в котором хранятся прочитанные объекты |
| size | - | размер каждого объекта в байтах |
| count | - | количество объектов для чтения |
| stream | - | поток для чтения |
Возвращаемое значение
Количество успешно прочитанных объектов, которое может быть меньше, чем count при возникновении ошибки или условия конца файла.
Если
size
или
count
равны нулю,
fread
возвращает ноль и не выполняет других действий.
fread
не различает конец файла и ошибку, и вызывающая сторона должна использовать
feof
и
ferror
чтобы определить, что произошло.
Пример
#include <stdio.h> enum { SIZE = 5 }; int main(void) { const double a[SIZE] = {1.0, 2.0, 3.0, 4.0, 5.0}; printf("Array has size %ld bytes, element size: %ld\n", sizeof a, sizeof *a); FILE *fp = fopen("test.bin", "wb"); // must use binary mode fwrite(a, sizeof *a, SIZE, fp); // writes an array of doubles fclose(fp); double b[SIZE]; fp = fopen("test.bin","rb"); const size_t ret_code = fread(b, sizeof b[0], SIZE, fp); // reads an array of doubles if (ret_code == SIZE) { printf("Array at %p read successfully, contents:\n", (void*)&a); for (int n = 0; n != SIZE; ++n) printf("%f ", b[n]); putchar('\n'); } else // error handling { if (feof(fp)) printf("Error reading test.bin: unexpected end of file\n"); else if (ferror(fp)) perror("Error reading test.bin"); } fclose(fp); }
Возможный вывод:
Array has size 40 bytes, element size: 8 Array at 0x1337f00d6960 read successfully, contents: 1.000000 2.000000 3.000000 4.000000 5.000000
Ссылки
- Стандарт C23 (ISO/IEC 9899:2024):
-
- 7.21.8.1 Функция fread (стр: TBD)
- Стандарт C17 (ISO/IEC 9899:2018):
-
- 7.21.8.1 Функция fread (стр: 243-244)
- Стандарт C11 (ISO/IEC 9899:2011):
-
- 7.21.8.1 Функция fread (стр: 335)
- Стандарт C99 (ISO/IEC 9899:1999):
-
- 7.19.8.1 Функция fread (стр: 301)
- Стандарт C89/C90 (ISO/IEC 9899:1990):
-
- 4.9.8.1 Функция fread
Смотрите также
|
(C11)
(C11)
(C11)
|
читает форматированный ввод из
stdin
, файлового потока или буфера
(функция) |
|
получает строку символов из файлового потока
(функция) |
|
|
записывает в файл
(функция) |
|
|
C++ documentation
для
fread
|
|