fread
Определён в заголовочном файле <stdio.h> | ||
|---|---|---|
size_t fread( void* buffer, size_t size, size_t count,
FILE* stream );
| (до C99) | |
size_t fread( void* restrict buffer, size_t size, size_t count,
FILE* restrict stream );
| (начиная с C99) |
Считывает до count объектов в массив buffer из указанного входного потока stream, как если бы для каждого объекта fgetc вызывалась size раз, а результаты сохранялись в полученном порядке в последовательных позициях buffer, который рассматривается как массив unsignedchar. Индикатор позиции файла для потока перемещается на число считанных символов.
В случае ошибки результирующее значение индикатора позиции файла для потока не определено. Если считан неполный элемент, его значение не определено.
Параметры
| 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++ для fread |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/io/fread