Namespaces
Variants

fread

From cppreference.net
< c ‎ | io
Определено в заголовке <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.19.8.1 Функция fread (стр: 301)
  • Стандарт C89/C90 (ISO/IEC 9899:1990):
  • 4.9.8.1 Функция fread

Смотрите также

читает форматированный ввод из stdin , файлового потока или буфера
(функция)
получает строку символов из файлового потока
(функция)
записывает в файл
(функция)
C++ documentation для fread