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, который интерпретируется как массив 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.21.8.1 Функция fread (стр.: 301)
- Стандарт C89/C90 (ISO/IEC 9899:1990):
- 4.9.8.1 Функция fread
См. также
(C11)(C11)(C11) |
считывает форматированный ввод из stdin, файлового потока или буфера (функция) |
| получает строку символов из файлового потока (функция) | |
| записывает в файл (функция) | |
Документация C++ для fread
| |