Spec-Zone.ru › C

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

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/io/fread

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API